快递中的JSON.stringify api响应

时间:2018-03-11 06:11:40

标签: javascript json node.js ecmascript-6

我正在读一些代码而且我看到了这个

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的重点,请赐教。

2 个答案:

答案 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();