gpt4 book ai didi

json - bodyParser 似乎不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:27 25 4
gpt4 key购买 nike

抱歉,如果这个问题听起来“简单”,但我无法让 body-parser 处理这个非常简单的示例:

"use strict";

const PORT = 3000;
const express = require("express");
const bodyParser = require("body-parser");
const app = express();

app.post("/api/login", (req, res) => {
if (!req.body) return res.sendStatus(400);
res.send("welcome, " + req.body.username);
});


app.use(express.json());
app.use(bodyParser.json());

console.log(`Listen on port ${PORT}`);
app.listen(PORT);

命令行尝试:

curl -H "Content-Type: application/json"-X POST -d '{"用户名":"xyz","密码":"xyz"}' http://localhost:3000/API/登录

并且它总是以 400 响应!我尝试了很多配置并没有找到解决方案。

我确信这非常简单,因为似乎没有人有同样的错误,所以我错过了一些东西,但不知道是什么!

express :4.16.2

正文解析器:1.18.2

感谢您的帮助!

编辑:解决方案是我需要将中间件放在之前路由定义。就我而言,不需要 body-parser 我可以只使用内置 API 的 express.jon()

"use strict";

const PORT = 3000;
const express = require("express");
const app = express();

app.use(express.json());

app.post("/api/login", (req, res) => {
if (!req.body) return res.sendStatus(400);
res.send("welcome, " + req.body.username);
});

console.log(`Listen on port ${PORT}`);
app.listen(PORT);

最佳答案

您将在路由定义之后将 bodyparser 安装为中间件。通常,您希望在路由之前定义预路由中间件或将路由单独发送到不同的文件。

只需重新排列您的代码,如下所示:

'use strict'

const PORT = 3000
const express = require('express')
const bodyParser = require('body-parser')
const app = express()

app.use(bodyParser.json()) // note: this is before the route

app.post('/api/login', (req, res) => {
console.log(req.body)
if (!req.body) return res.sendStatus(400)
res.send('welcome, ' + req.body.username)
})

app.use(express.json())

console.log(`Listen on port ${PORT}`)
app.listen(PORT)

如果你想在单独的文件中使用bodyparser作为中间件,常见的用法如下:

routes/someroute.js

const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()

module.exports = (app) => {

app.post('/a/route', jsonParser, (req,res) => {
...
})

}

关于json - bodyParser 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48132355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com