我使用post:
将JSON对象发送到我的服务器 const xhr = new XMLHttpRequest();
var params = {
firstname: "Joe",
lastname: "Bloggs"
};
xhr.open('post', '/api/endpoint');
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.responseType = 'json';
xhr.addEventListener('load', () => {
...
});
xhr.send(JSON.stringify(params));
我使用快递来处理请求:
...
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
...
然后在我的api端点我正在使用Express Router:
const express = require('express');
const router = new express.Router();
router.post('/endpoint', (req, res) => {
console.log(req.body);
});
当我打印出req.body时,我得到以下内容:
{ '{"firstname":"Joe","lastname":"Bloggs"}': '' }
如果我使用JSON.parse(req.body),我会收到以下错误:
TypeError:无法将对象转换为原始值 在JSON.parse()
如何以我可以使用的格式获取有效负载的内容,即json对象?
答案 0 :(得分:0)
您表示您将在此处发送application/x-www-form-urlencoded
:
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
在这里你发送JSON:
xhr.send(JSON.stringify(params));
这是一个明显的违规行为。确保在提出请求时遵守您向服务器指明的格式:
var payload = 'firstname=' + encodeURIComponent(params.firstname) +
'&lastname=' + encodeURIComponent(params.lastname);
xhr.send(payload);
另一方面,如果您想发送JSON内容,那么您可以在服务器上添加相应的正文解析器:
app.use(bodyParser.json({ type: 'application/json' }))
然后在客户端上设置正确的Content-Type请求标头:
xhr.setRequestHeader('Content-type', 'application/json');
现在您可以在发送请求时JSON.stringify
:
xhr.send(JSON.stringify(params));
在api端点,然后可以从req.body
中提取JSON(无需使用JSON.parse
)