通过POST发送JS变量ownerSteamId时服务器日志为空对象,求解决方案
问题原因
服务器端配置了bodyParser.json(),只会解析Content-Type为application/json的请求体,但客户端发送的请求Content-Type设为text/html,且请求体是纯字符串,导致JSON解析器无法识别,最终request.body为空对象。
解决方案
有两种可行的修改方式,根据需求选择:
方式一:客户端发送JSON格式数据(推荐)
将请求的Content-Type改为application/json,并把要发送的ID包装成JSON字符串:
const ownerSteamId = '76561198034202275'; const options = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ownerSteamId }) }; fetch('/api', options);
服务器端无需修改,此时console.log(request.body)会输出:
{ ownerSteamId: '76561198034202275' }
如果只想打印ID值,可以改为:
console.log(request.body.ownerSteamId)
方式二:服务器添加文本解析中间件
保持客户端代码不变,在服务器端添加解析text/html类型请求体的中间件:
const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.listen(3000, () => console.log('listening at 3000')); app.use(express.static('public')); app.use(bodyParser.json()); // 添加解析text/html类型的文本中间件 app.use(bodyParser.text({ type: 'text/html' })); app.post('/api', (request, response) => { console.log(request.body) // 直接输出76561198034202275 });
内容的提问来源于stack exchange,提问作者LostInTheCSSauce
相关产品推荐
相关产品推荐

