无法访问 express js router.delete 中的参数

Posted

技术标签:

【中文标题】无法访问 express js router.delete 中的参数【英文标题】:unable to access parms in expressjs router.delete 【发布时间】:2017-04-07 22:02:36 【问题描述】:

这是我的代码片段,我在其中使用了 Express 路由器和 Mongoose 模型。

我无法访问 id parm。

router.delete('/task/:id', function (req, res) 
    Task.remove( did: req.parms.id , (err) => 
        if (err) 
            res.send(err);

        
    );


);

这是我收到的错误

TypeError:无法读取未定义的属性“id” 在 F:\NS\routes\tasks.js:11:33 在 Layer.handle [as handle_request] (F:\NS\node_modules\express\lib\router\layer.js:95:5) 在下一个 (F:\NS\node_modules\express\lib\router\route.js:131:13) 在 Route.dispatch (F:\NS\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (F:\NS\node_modules\express\lib\router\layer.js:95:5) 在 F:\NS\node_modules\express\lib\router\index.js:277:22 在参数 (F:\NS\node_modules\express\lib\router\index.js:349:14) 在参数 (F:\NS\node_modules\express\lib\router\index.js:365:14) 在 Function.process_params (F:\NS\node_modules\express\lib\router\index.js:410:3) 在下一个 (F:\NS\node_modules\express\lib\router\index.js:271:10) 在 Function.handle (F:\NS\node_modules\express\lib\router\index.js:176:3) 在路由器 (F:\NS\node_modules\express\lib\router\index.js:46:12) 在 Layer.handle [as handle_request] (F:\NS\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix (F:\NS\node_modules\express\lib\router\index.js:312:13) 在 F:\NS\node_modules\express\lib\router\index.js:280:7 在 Function.process_params (F:\NS\node_modules\express\lib\router\index.js:330:12) 在下一个 (F:\NS\node_modules\express\lib\router\index.js:271:10) 在 F:\NS\node_modules\express-validator\lib\express_validator.js:291:5 在 Layer.handle [as handle_request] (F:\NS\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix (F:\NS\node_modules\express\lib\router\index.js:312:13) 在 F:\NS\node_modules\express\lib\router\index.js:280:7 在 Function.process_params (F:\NS\node_modules\express\lib\router\index.js:330:12)

【问题讨论】:

【参考方案1】:

当访问路由参数时,对象不是parms,它的params. 因为parms总是undefined,你会遇到这个问题,因为你试图访问一个属性undefined 你做不到。

router.delete('/task/:id', (req, res) => 
    Task.remove( did: req.params.id , (err) => 
        if (err) 
            return res.send(err);
    );
);

【讨论】:

【参考方案2】:

您可能会在运行代码时看到这一点,但不推荐使用 Model.remove()。相反,我推荐 Model.deleteOne(),以防在未来的更新中不再支持它。

【讨论】:

以上是关于无法访问 express js router.delete 中的参数的主要内容,如果未能解决你的问题,请参考以下文章

无法访问我的站点中的链接(复制和粘贴):Node.js - Express.js - Webpack - Vue.js - 历史模式

express-jwt 无法从路由目录访问 req.user

LetsEncrypted Node.js HTTPS Express无法从浏览器访问

使用 Express 限制对 Node.js 的访问

无法在 LAN 网络上托管 Express.js 应用程序

无法使用 Express.js 从请求中获取 POST 正文