Javascript 如何在服务器端提取req.body(I';m使用fetch)?
我正在做一个项目,包括独立的前端和后端。从前端,我通过fetch发出POST请求,该请求应向后端发送字符串“ORANGE”,然后后端应将其记录到控制台。我无法让后端控制台记录字符串。我在devtools中查看了请求,字符串“ORANGE”被隐藏在“requestpayload”下面。请求本身发送得很好。如何实际访问字符串以便使用它进行操作?(例如,存储在数据库中) 尝试以下操作:Javascript 如何在服务器端提取req.body(I';m使用fetch)?,javascript,node.js,express,Javascript,Node.js,Express,我正在做一个项目,包括独立的前端和后端。从前端,我通过fetch发出POST请求,该请求应向后端发送字符串“ORANGE”,然后后端应将其记录到控制台。我无法让后端控制台记录字符串。我在devtools中查看了请求,字符串“ORANGE”被隐藏在“requestpayload”下面。请求本身发送得很好。如何实际访问字符串以便使用它进行操作?(例如,存储在数据库中) 尝试以下操作: 在server.js文件中使用主体解析器 将post请求作为内容类型作为json发送,如下所示 headers:{C
内容类型
作为json
发送,如下所示
headers:{Content-Type:application/json}
正文:{“颜色”:“橙色”}
console.log(要求主体颜色)
因此,您的响应中没有body对象,只有一个json对象,即您的body。Express默认情况下不会处理请求的body。您需要加载一个模块来显式地执行此操作 因为您使用的是纯文本,所以可以使用body解析器模块。这将在请求上创建一个
body
属性:
const bodyParser = require('body-parser');
router.use(bodyParser.text({type: 'text/plain'}))
router.post('/posts/:id', function(req, res, next) {
console.log(req.body);
res.send('Response')
});
但是,请注意,通常最好使用JSON之类的结构化数据格式,而不是纯文本。在Express 4.16中,不再需要主体解析器模块。获得身体所需的一切是:
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
使用
“内容类型”:“application/x-www-form-urlencoded”
,否则CORS将发送预飞行,给您带来困难。(有关此google CORS简单请求要求的更多信息)。关于console.log(req.body)
?req.body是未定义的。过去,req.body在请求中有一个rawBody属性,但该属性已被删除,现在所有请求体都应使用JSON。如果你想发送纯文本正文,你必须实现你自己的中间件,如回答中所述:你需要用一个实际的id替换:id in.@jperl,这在路由使用该参数做任何事情时都是必要的,但这并不能阻止正文的可用性;它将把req.params.id绑定到字符串:id
。
const bodyParser = require('body-parser');
router.use(bodyParser.text({type: 'text/plain'}))
router.post('/posts/:id', function(req, res, next) {
console.log(req.body);
res.send('Response')
});
app.use(express.urlencoded({ extended: true }));
app.use(express.json());