Express bodyParser 无法正常工作
Express bodyParser not working properly
我有一个 bodyparser 的问题,我无法弄清楚。
几周前,我用 Express 创建了一个 REST API,并使用 bodyParser 从客户端读取 JSON 数据。一切正常,但今天早上我尝试启动我的应用程序,但我所有的 req.body.data 都是未定义的,实际上正文等于 {}。
这是我的配置:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
然后我配置我的路线。我已经看到你必须按照这个顺序声明,即 bodyParser 在你的路线之前,这就是我所做的。我还以为是版本问题,后来升级了几次,问题依旧。
我用HttpRequester模拟客户端。直到今天早上一切正常。
发送的数据示例:
{
"username": "david",
"password": "bowie",
"email": "db@sfr.fr"
}
然后就是响应代码:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger('dev'));
app.use(expressValidator());
app.use(cookieParser());
app.use('/users', users);
然后在用户中我只创建了一个用户:
// Creation of a user.
router.post('/create', function(req, res) {
// We check current mistakes like username or password empty.
if (!userhelper.checkCreateUserRequest(req, res)) {
return;
}
// Save the user in BDD
}
在 checkCreateUserRequest 中,我这样做:
if (req.body.username == null || req.body.password == null || req.body.email == null) {
res.status(400).json({message: "malformed request", code: 1});
return false;
}
我做了其他事情,例如检查用户名是否为空,但我认为粘贴它并不重要。
感谢您的回复,抱歉我的英语不好...
如果您使用 JSON 请求,您可以设置正确的 HTTP header。
Content-Type: application/json
对于使用 Express v4.16+ 的任何人,不再需要 body-parser 作为 third-party 依赖项。 Express 有自己的 built-in body 解析器,可以像这样使用:
Server.js
const express = require('express')
const app = express()
app.use(express.json())
app.use(express.urlencoded({extended: false}))
在我的例子中,以这种方式初始化我的应用程序仍然导致为 req.body 记录一个空的 object(即 {})。我发现以下软件包也很有用
npm i cors
npm i path
并且可以通过在 server.js(或您各自的文件)中包含以下内容来使用它们
app.use(cors())
app.use(express.static(path.join(__dirname, 'public')))
您可能还发现有必要在您的客户端提取请求中包含 'Content-Type':'application-json' header。
我有一个 bodyparser 的问题,我无法弄清楚。
几周前,我用 Express 创建了一个 REST API,并使用 bodyParser 从客户端读取 JSON 数据。一切正常,但今天早上我尝试启动我的应用程序,但我所有的 req.body.data 都是未定义的,实际上正文等于 {}。
这是我的配置:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
然后我配置我的路线。我已经看到你必须按照这个顺序声明,即 bodyParser 在你的路线之前,这就是我所做的。我还以为是版本问题,后来升级了几次,问题依旧。
我用HttpRequester模拟客户端。直到今天早上一切正常。
发送的数据示例:
{
"username": "david",
"password": "bowie",
"email": "db@sfr.fr"
}
然后就是响应代码:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger('dev'));
app.use(expressValidator());
app.use(cookieParser());
app.use('/users', users);
然后在用户中我只创建了一个用户:
// Creation of a user.
router.post('/create', function(req, res) {
// We check current mistakes like username or password empty.
if (!userhelper.checkCreateUserRequest(req, res)) {
return;
}
// Save the user in BDD
}
在 checkCreateUserRequest 中,我这样做:
if (req.body.username == null || req.body.password == null || req.body.email == null) {
res.status(400).json({message: "malformed request", code: 1});
return false;
}
我做了其他事情,例如检查用户名是否为空,但我认为粘贴它并不重要。
感谢您的回复,抱歉我的英语不好...
如果您使用 JSON 请求,您可以设置正确的 HTTP header。
Content-Type: application/json
对于使用 Express v4.16+ 的任何人,不再需要 body-parser 作为 third-party 依赖项。 Express 有自己的 built-in body 解析器,可以像这样使用:
Server.js
const express = require('express')
const app = express()
app.use(express.json())
app.use(express.urlencoded({extended: false}))
在我的例子中,以这种方式初始化我的应用程序仍然导致为 req.body 记录一个空的 object(即 {})。我发现以下软件包也很有用
npm i cors
npm i path
并且可以通过在 server.js(或您各自的文件)中包含以下内容来使用它们
app.use(cors())
app.use(express.static(path.join(__dirname, 'public')))
您可能还发现有必要在您的客户端提取请求中包含 'Content-Type':'application-json' header。