我从浏览器客户端发出POST请求:
const post = async (url, body) => {
try {
const response = await fetch(url, {
method: `POST`,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body
});
return response.json();
} catch (error) {
console.log(error.stack);
}
}
const data = await post(`http://localhost:4050/analyze`, { text });
我使用以下设置在Express服务器上处理它:
app.use(express.urlencoded({ extended: true }));
这是我的路线:
router.post(`/`, errorHandler(async (req, res, next) => {
const { text } = req.body;
console.log(req.body)
const value = await analyze(text);
res.json({ rephrased });
}));
console.log显示了以下内容:
{ 'object Object': '' }
为什么fetch方法给我Object而不是text属性?
更新:当我做字符串化:
method: `POST`,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: JSON.stringify(body)
身体变成这样,console.log显示:
{ '{"text":"asdfasdf"}': '' }
1条答案
按热度按时间0pizxfdo1#
您向
fetch
传递了body
的一个普通对象,但它不知道如何处理它,因此它调用.toString()
,但没有提供任何有用的信息。传递一个
URLSearchParams
对象(这里我假设text
是一个字符串)这将转换为application/x-www-form-urlencoded字符串。
(You也可以忽略
headers
,因为fetch
可以从URLSearchParams
对象推断正确的Content-Type
。)重新编辑:
JSON.stringify
将数据编码为JSON。JSON不是application/x-www-form-urlencoded。