【问题标题】:Node Express Router can't get response paramsNode Express 路由器无法获取响应参数
【发布时间】:2018-07-12 16:57:51
【问题描述】:

我无法在 Web 应用程序中使用简单的 express.Router() 检索路由参数。

这是一个最小的例子:

var http      = require('http');
const express = require('express');
const app     = express();

app.use('/hello/:world', express.Router()
    .get('/', function (req, res) {
        console.log("hello : ", req.params); //
        res.status(200).send({status: 'success', params: req.params});
}));

var port = process.env.PORT || 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);

我没有收到任何错误,当我尝试访问时,res.params 只是空的: 以http://localhost:3000/hello/100 为例。

回复如下:

{
  "status": "success",
  "params": {}
}

到目前为止我尝试的是设置express.Router({ params: 'inherit' }) 如此处所述:https://github.com/expressjs/express/issues/2151#issuecomment-44716623 但它不会改变任何东西。

这是手册:http://expressjs.com/en/guide/routing.html

【问题讨论】:

  • 属性params 存在于req 对象上,但不存在于res 上。你好像有错别字。
  • 你是对的 -> 已修复。谢谢。
  • 这能解决空响应的问题吗?
  • 不,但我在文档上从未创建过的其他页面上找到了可行的解决方案。

标签: node.js express express-router


【解决方案1】:

答案:

最终对我有用的东西,基于这些:

API 文档:http://expressjs.com/en/api.html
示例:Express Router undefined params with router.use when split across files

是设置express.Router({mergeParams: true})。

所以:

var http      = require('http');
const express = require('express');
const app     = express();

app.use('/hello/:world', express.Router({mergeParams: true})
    .get('/', function (req, res) {
        console.log("hello : ", req.params); //
        res.status(200).send({status: 'success', params: req.params});
}));

var port = process.env.PORT || 3000;
app.set('port', port);
var server = http.createServer(app);
server.listen(port);

正在通过http://localhost:3000/hello/10给出以下回复

{
  "status": "success",
  "params": {
    "world": "10"
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2018-07-25
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多