因此,可以尝试获取以下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在结尾追加一个新行字符来写出这样的东西呢?
以下是解决方案:
//Here, JSON object is doc
const M={"First Name":doc.First_Name,
"Last Name":doc.Last_Name,
"Doctor's Email":doc.Email,
"Doctors Picture Link":doc.Image};
res.write(JSON.stringify(M,null,10)+"\n");
res.end();
其他渲染对象的方法
console.log(doc);
res.json(doc);
//Here,M is referred from the above code it is contains doc Object
res.send(M);
我是如何获得对象使用猫鼬:
//Here, Handles contains my MongoDB Schema.
const NN=Handles.findOne().lean().exec(function(err, doc) {
console.log(doc);
});
您可以使用中间件来设置默认的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>`);
})
这个响应也是一个字符串,如果你想发送经过修饰的响应,出于某种尴尬的原因,你可以使用JSON之类的东西。stringify(anObject, null, 3)
将Content-Type报头设置为application/json也很重要。
var http = require('http');
var app = http.createServer(function(req,res){
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ a: 1 }));
});
app.listen(3000);
// > {"a":1}
他们:
var http = require('http');
var app = http.createServer(function(req,res){
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({ a: 1 }, null, 3));
});
app.listen(3000);
// > {
// > "a": 1
// > }
我不太确定为什么要用换行符结束它,但你可以只做JSON.stringify(…)+ '\n'来实现这一点。
表达
在express中,您可以通过更改选项来实现这一点。
json替换回调,默认为null
用于格式化的json响应空间,开发时默认为2,生产时默认为0
实际上不建议设置为40
app.set('json spaces', 40);
然后你可以用一些json来响应。
res.json({ a: 1 });
它将使用“json spaces”配置来美化它。