В x86 возвращаемое значение сохраняется в регистре EAX, который «случайно» также используется этим компилятором для хранения результата арифметических операций (или, по крайней мере, вычитания). Вы можете проверить это, посмотрев сборку, сгенерированную вашим компилятором. Я согласен с kriss - вы не можете предположить, что это всегда будет так, поэтому лучше явно указать возвращаемое значение.
Этот ответ также является строкой, если вы хотите отправить отзыв, который был убран, по какой-то неудобной причине вы могли бы использовать что-то вроде 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.send(JSON.stringify({ a: 1 }));
});
app.listen(3000);
// > {"a":1}
Prettified:
var http = require('http');
var app = http.createServer(function(req,res){
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ a: 1 }, null, 3));
});
app.listen(3000);
// > {
// > "a": 1
// > }
Я не совсем уверен, почему вы хотите закончить его с помощью новой строки, но вы могли бы просто сделать JSON.stringify(...) + '\n'
, чтобы достичь этого.
В выражении вы можете сделать это с помощью вместо параметров вместо .
'json replacer'
Обратный вызов репликации JSON, по умолчанию по умолчаниюblockquote>
'json spaces'
Пространства ответов JSON для форматирования, по умолчанию 2 в разработке, 0 в производствеNot на самом деле рекомендуется установить значение 40
app.set('json spaces', 40);
Тогда вы можете просто ответить некоторым json.
res.json({ a: 1 });
Он будет использовать конфигурацию
'json spaces
для отмените его.
Если вы пытаетесь отправить json-файл, вы можете использовать потоки
var usersFilePath = path.join(__dirname, 'users.min.json');
apiRouter.get('/users', function(req, res){
var readable = fs.createReadStream(usersFilePath);
readable.pipe(res);
});
Так как Express.js 3x, объект ответа имеет метод json (), который правильно устанавливает для всех заголовков и возвращает ответ в формате JSON.
Пример:
res.json({"foo": "bar"});
Вы можете просто отключить его, используя канал и один из многих процессоров. Ваше приложение должно всегда отвечать с минимальной нагрузкой.
$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue | underscore print
Вы можете использовать промежуточное программное обеспечение для установки стандартного Content-Type и устанавливать Content-Type по-разному для определенных API. Вот пример:
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>`);
})
curl
из командной строки, приятно иметь новую строку в конце вывода, чтобы моя командная строка не застряла в конце вывода. – amacleod 25 January 2015 в 21:10res.send
автоматически установитcontent-type
в JSON, если отправленный элемент является объектом или массивом. – royhowie 12 April 2015 в 00:58res.end()
в своемhttp
(не экспресс) примере – Tobias Fünke 5 August 2016 в 11:00