node.js - req.body 返回未定义 - nodejs
问题描述
当我把 app.use(bodyParser.json()); 下面app.use('/api', require('./routes/api')) req.body 返回未定义。但是如果我把 app.use(bodyParser.json()); 以上app.use('/api', require('./routes/api')); 它正确返回。那么问题是为什么?
这是我的代码:index.js 文件
const express = require('express');
const app = express();
const bodyParser= require('body-parser');
app.use(bodyParser.json());
app.use('/api', require('./routes/api'));
app.listen(process.env.port || 3000, function(){
console.log('You are listening to port 3000');
});
api.js 文件
const express= require('express');
const router= express.Router();
router.get('/ninjas', function(req, res){
res.send({type: 'GET'});
});
router.post('/ninjas', function(req, res){
console.log(req.body);
res.send({type: 'POST'});
});
router.put('/ninjas/:id', function(req, res){
res.send({type: 'PUT'});
});
router.delete('/ninjas/:id', function(req, res){
res.send({type: 'DELETE'});
});
module.exports =router;
提前致谢!
解决方案
我们需要 body-parser 中间件从 req.body 中读取,
在 Javascript 代码中逐行执行(对于非 IO 操作)。
因此,当您在需要路由器文件逻辑之后放置 app.use(bodyParser.json()) 时,不会调用和插入 body-parser,因此您需要在任何其他逻辑之前调用它,以便您可以从请求中读取。
推荐阅读
- grammar - 如何定义一种不符合乔姆斯基层次结构的语言?
- javascript - 示例代码,错误:应为“;” 但发现“类”和更多语法错误
- firebase - InvalidUrlError:无法识别的方案“gs”
- python-asyncio - 使用 asyncio.Queue() 时如何取消获取?
- javascript - 从比较中列出清单
- javascript - DiscordJS:检查输入是否在字符串中
- php - MySQLi 已启用但未在 Windows Server 2008 中加载
- node.js - 如何在 node.js 中的一台服务器上运行多个多人游戏(服务器)
- python - list1 在我的代码中的任何地方都不会被分配等于 list2,但是 list1 的值仍然被复制到 list2
- android - 当只有一个建议时,AutoCompleteTextView 建议隐藏在键盘下