如何处理路径的参数?

时间:2019-05-23 14:51:13

标签: node.js express

我配置了一些路线:

var express = require('express');
var router = express.Router();

router.post('/isAccessible/:orgaId', function(req, res, next) {
    res.send("------ param = "+orgaId);
});

module.exports = router;

然后在ejs文件中:

<script>
  function isOrganisationAccessible(orgaId) {
    $.ajax({
      url: "/organisation/isAccessible/"+orgaId,
      type: "POST",
      dataType: "text",
      success : function(data, status, xhr) {
        return data;
      },
      error : function(xhr, status, error) {
        return "";
      }
    });
  }
  $(document).ready(function() {
    alert("test = "+isOrganisationAccessible("xxx"));
  });
</script>

在运行时,我得到undefined!那么如何获取传递给路由的参数呢?

2 个答案:

答案 0 :(得分:1)

您不能直接访问orgaId。您需要像这样访问它:

req.params.orgaId 

更新: 我测试了这个简单的应用,在/ isAccessible / abc上运行正常 我用get查询测试了,但是用post也测试了。另外,为什么在不发送任何数据时使用post?

const express = require('express');  

let app = express();  

// Function to handle the root path
app.get('/isAccessible/:orgaId', function(req, res, next) {
    res.send("------ param = "+req.params.orgaId);
});

let server = app.listen(3000, function() {  
    console.log('Server is listening on port 3000')
});

答案 1 :(得分:1)

您似乎遇到的问题是isOrganisationAccessible是异步的。 从success函数返回的数据没有得到您期望的结果 因为数据不是从isOrganisationAccessible返回,而是仅从success返回 功能。 isOrganisationAccessible将始终返回undefined

您可以通过承诺来解决此问题:

function isOrganisationAccessible(orgaId) {
  return new Promise((resolve, reject) => {
    $.ajax({
      url: "/organisation/isAccessible/"+orgaId,
      type: "POST",
      dataType: "text",
      success : function(data, status, xhr) {
        resolve(data);
      },
      error : function(xhr, status, error) {
        reject(error);
      }
    });
  })
}

然后解决诺言以检查结果:

$(document).ready(function() {
  isOrganisationAccessible("xxx").then((data) => {
    alert(data)
  })
})