【问题标题】:Why is req.params returning 'undefined'?为什么 req.params 返回“未定义”?
【发布时间】:2014-10-24 18:28:15
【问题描述】:

我有一个简单的 cmets 应用程序,它允许用户通过表单在系统中输入评论,然后这些评论会登录到页面底部的列表中。

我想修改它,以便用户可以在创建 cmets 标题后单击它,它会加载与该评论相关的相关内容。

我在 app.js 中修改了我的路由以查找 :id:

并且还修改了我的主要 Show.js 路由,以使用id 作为findOne 命令中的参数来定位评论。

我还输入了console.log() 命令来注销req.params.id

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Comment = mongoose.model('Comment', Comment);

router.get('/', function(req, res) {
        Comment.findOne({ id: req.params.id }, function(err, comment){
            console.log(req.params.id)
        });
});

module.exports = router;

但是,我得到的只是终端中的undefined 消息。

如果我将 console.log() 直接放在我的 app.js 中,我会按预期记录 id。

app.use('/:id', function(req,res) {
    console.log(req.params.id)
});

我是否在路线中遗漏了阻止我获取 id 参数的内容?

【问题讨论】:

  • router.get('/:id', function(req, res) { ???

标签: node.js express routes mongoose


【解决方案1】:

在路由器页面调用你的路由器时需要传递{mergeParams: true}

    var router = express.router({mergeParams: true})

这会将父参数传递给子。

【讨论】:

  • 嗨,假设“/mobile/custom/******/deviceVersion/:deviceType”是我的请求。你能告诉我如何检查未定义的“设备类型”吗?
【解决方案2】:

你需要在你的get路由中指定:id,像这样:

// GET /1 -> print 1
router.get('/:id', function(req, res) {
    console.log(req.params.id);
});
// GET /foo/1/bar/2 -> print 1, print 2
router.get('/foo/:id1/bar/:id2', function(req, res) {
    console.log(req.params.id1);
    console.log(req.params.id2);
});

【讨论】:

  • @Keva161 这有帮助吗?
  • 嗨,假设“/mobile/custom/******/deviceVersion/:deviceType”是我的请求。你能告诉我如何检查“deviceType”与未定义吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2018-07-11
相关资源
最近更新 更多