因此,可以尝试获取以下JSON对象:

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked

{
   "anotherKey": "anotherValue",
   "key": "value"
}
$

是否有一种方法可以使用node或express在服务器的响应中生成完全相同的正文?显然,我们可以设置报头并指出响应的内容类型将是“application/json”,但是还有不同的方法来编写/发送对象。我所看到的最常用的是使用表单的命令:

response.write(JSON.stringify(anObject));

然而,这有两点,人们可以认为它们是“问题”:

我们正在发送一个字符串。 而且,最后没有新的行字符。

另一个想法是使用命令:

response.send(anObject);

这似乎是在发送一个基于curl输出的JSON对象,类似于上面的第一个示例。但是,当在终端上再次使用curl时,正文末尾没有新的行字符。那么,如何用node或node/express在结尾追加一个新行字符来写出这样的东西呢?


当前回答

您可以使用管道和许多处理器中的一个来美化它。你的应用应该总是响应尽可能小的负载。

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue | underscore print

https://github.com/ddopson/underscore-cli

其他回答

res.json()函数对于大多数情况应该足够了。

app.get('/', (req, res) => res.json({ answer: 42 }));

res.json()函数使用JSON.stringify()将传入的参数转换为JSON,并将Content-Type报头设置为application/ JSON;charset=utf-8以便HTTP客户端知道自动解析响应。

因为Express.js 3x响应对象有一个json()方法,它为你正确设置所有的头,并以json格式返回响应。

例子:

res.json({"foo": "bar"});

对于问题的头部分,我要喊出res。在这里输入:

res.type('json')

等于

res.setHeader('Content-Type', 'application/json')

来源:express docs:

将Content-Type HTTP报头设置为MIME类型,由MIME .lookup()为指定类型确定。如果type包含“/”字符,则它将Content-Type设置为type。

如果你正在使用Express,你可以使用这个:

res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({key:"value"}));

或者只是这样

res.json({key:"value"});

您可以使用中间件来设置默认的Content-Type,并为特定的api设置不同的Content-Type。这里有一个例子:

const express = require('express');
const app = express();

const port = process.env.PORT || 3000;

const server = app.listen(port);

server.timeout = 1000 * 60 * 10; // 10 minutes

// Use middleware to set the default Content-Type
app.use(function (req, res, next) {
    res.header('Content-Type', 'application/json');
    next();
});

app.get('/api/endpoint1', (req, res) => {
    res.send(JSON.stringify({value: 1}));
})

app.get('/api/endpoint2', (req, res) => {
    // Set Content-Type differently for this particular API
    res.set({'Content-Type': 'application/xml'});
    res.send(`<note>
        <to>Tove</to>
        <from>Jani</from>
        <heading>Reminder</heading>
        <body>Don't forget me this weekend!</body>
        </note>`);
})