我正在读一些代码而且我看到了这个
router.post('/', (req, res) => {
const {author, message} = req.body;
if (author === undefined) {
res.status(400);
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ message: 'Every message requires an author' }));
return
}
res.redirect('/');
});
我不知道为什么需要使用JSON.stringify,我不能res.send({ message: 'Every message requires an author' })
吗?
路由有单元测试,它使用JSON.parse
describe('when the author is blank', () => {
it('renders an error message', async () => {
const message = 'Server Testing';
const response = await request(app)
.post('/messages')
.send({message});
assert.equal(response.status, 400);
assert.equal(JSON.parse(response.text).message, 'Every message requires an author')
});
});
我没有看到使用JSON.stringify和JSON.parse的重点,请赐教。
答案 0 :(得分:0)
你可以删除,但即使你传递的是精确的json,也可能会导致一些意想不到的结果。我将与您分享一个例子。 我正在开发一个项目,我需要以json格式发送酒店ID。我发送了确切的格式,但服务器不接受这个并且抛出500错误,所以最好保持更安全的一面并声明您的数据在一个单独的变量中,并在get / post请求中使用json.stringify格式传入该数据。这是一种很好的做法。 所以拥有它们总是好的: - )
答案 1 :(得分:0)
服务器端使用:
res.json({a: 123})
而不是
res.send(JSON.stringify({a: 123}))
http://expressjs.com/en/api.html#req.body
然后在单元测试中:
const response = await request(app).post('/messages').send({message});
const data = await response.json();