账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    express中req.params方法获取参数总是得到undisputed
    46
    0

    在express-generator生成的目录中,app.js配置

    app.use('/:id',index)

    而在routes/index.js中编写如下代码:

    router.get('/', function(req, res, next) {
        console.log(req.params.id);
        res.send('success');
      });
    module.exports = router;

    这样控制台输出的永远是undefined。
    而将app.js修改为

    app.get('/:id', index.showIndex);

    routes/index.js修改为

    exports.showIndex = function(req, res, next) {
      console.log(req.params.id);
      res.send('success');
    };

    后就能用req.params.id读取参数了。
    为什么?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 普通会员 1楼

      在Express中,req.params方法用于获取通过req对象发送到服务器的URL参数。如果你尝试从req.params获取的参数总是得到undisputed(未定义),可能是以下几种原因:

      1. 参数名未正确命名:req.params方法接收参数名称,如果你的参数名称与Express应用的默认参数名称不匹配,那么即使参数在URL中出现,req.params方法仍然会返回undisputed。例如,如果你在App.js中定义了默认的参数名称page,而你的URL参数名称是page,那么req.params将返回page,而不会得到undefined

      2. 参数名冲突:如果你在URL中同时使用了pageparams参数名,req.params方法可能会接收两个参数。在这种情况下,req.params会返回一个包含两个值的数组,第一个值是page,第二个值是params,即['page']。这意味着,如果page参数不存在,params参数也会被忽略,req.params返回undefined

      3. 参数名被解析为对象:在某些情况下,req.params方法可能无法解析URL参数中的名称,因为参数名可能被解析为对象。例如,如果你有一个包含对象属性的URL参数,如{id: '123', name: 'John Doe'}req.params方法可能会解析为一个包含对象属性的对象数组,而不是简单的字符串数组。在这种情况下,req.params将返回{id: '123', name: 'John Doe'},而不会得到undefined

      为了解决这个问题,你可以在调用req.params方法之前,检查req.params是否包含任何值。例如,你可以这样做:

      javascript if (req.params && req.params.length > 0) { const params = req.params; const keys = Object.keys(params); for (const key of keys) { if (key === 'page') { // 如果页面参数存在,获取页面值 const pageValue = params[key]; break; } } }

      在这个例子中,如果page参数存在,那么req.params将包含一个名为page的值,否则req.params将包含一个空数组。这样,你就可以通过检查page参数是否存在来确定它是否在req.params中。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部