我正在开发一个小型服务器应用程序,以允许客户端创建用户。我无法解析req.body。我试图在Internet上到处阅读,但没有适合我的解决方案。
我的projet根目录上有2个文件。 -用于api配置的server.js,以及 -用于应用程序配置的app.js
// app.js
const express = require('express');
const bodyParser = require('body-parser');
const router = require('./routes/index.routes');
const app = express();
// Parse incoming requests data
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(router);
我的路线在routes / index.routes.js中
const express = require('express');
const QuickCreditCtrl = require('../controller/controller');
const router = express.Router();
const baseUrl = '/api/v1';
router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser);
//router.post(`${baseUrl}/auth/signin`, QuickCreditCtrl.loginUser);
module.exports = router;
以及controller / controller.js上的控制器
const user = require('../data/users');
class QuickCreditsCtrl {
createUser(req, res) {
console.log(JSON.stringify(req.body));
if (!req.body.name) {
return res.status(404).send({
status: '404',
message: 'name is required',
});
} else if(!req.body.email) {
return res.status(404).send({
status: 404,
message: 'email is required'
});
}
const userNew = {
id: user.length + 1,
email: req.body.email,
name: req.body.name,
password: 'user123',
};
user.push(userNew);
return res.status(200).send({
status: 200,
//message: 'New user added successfully',
userNew,
//data: userNew
});
}
}
const QuickCreditCtrl = new QuickCreditsCtrl();
//export default QuickCreditCtrl;
module.exports = QuickCreditCtrl;
当我使用Postman或curl时,除了我无法访问req.body之外,其他都可以。我不知道为什么要使用body-parser。
我的代码有问题吗?
我正在尝试简化事情,但仍然无法访问req.body。我读了太多书,但是找不到解决我问题的方法。在下面的文件中,我尝试执行app.js文件中的所有操作,但徒劳无功:
const express = require('express');
const bodyParser = require('body-parser');
const db = require('./data/users')
const app = express();
// Parse incoming requests data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/api/v1/auth/signup', (req, res) => {
const data = {
id: db.length + 1,
email: req.body.email,
firstN: req.body.firstN,
lastN: req.body.lastN,
password: 'Patie123',
};
db.push(data);
return res.status(200).send({
status: 200,
message: 'User created successfully',
data,
});
console.log(data);
});
module.exports = app;
我的代码到底有什么问题?或如何访问req.body?
答案 0 :(得分:0)
一切似乎正确。 最可能的原因是该请求没有JSON正文。
此中间件
app.use(bodyParser.json());
如果找到标题“ Content-Type”:“ application / json”,则可以使用。
可以分享一个请求示例吗?
答案 1 :(得分:0)
尝试将urlencode设置为“ false”:
app.use(bodyParser.urlencoded({ extended: false }));
让我们知道是否可以解决该问题!
编辑:
然后,我尝试进行更深入的了解,我注意到以下代码行:
> router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser);
> //router.post(`${baseUrl}/auth/signin`, QuickCreditCtrl.loginUser);
此处没有回调,您应将req
和res
作为参数传递:
> router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser, (req, res) => {
//HERE YOU HAVE ACCESS TO req.body
}))