Hapi - 仅回复 JSON
Hapi - reply JSON only
如何调整 Hapi 回复功能,使其只回复 JSON 个对象?
我应该把它原样发送然后发送吗?好像没找到好的例子
这里是一些编辑 - 添加了一些示例代码以了解发生了什么。
路线:
server.route({
method: 'GET',
path: '/user/',
handler: function (request, reply) {
var ids = null;
mysqlConnection.query('SELECT ID FROM Users;',function(err,rows,fields){
if(err) throw err;
ids = rows;
// console.log(ids);
reply(ids);
});
}
});
回复:
<html><head></head><body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">[{"ID":1},{"ID":2},{"ID":3},{"ID":4},{"ID":5},{"ID":6},{"ID":7},{"ID":8},{"ID":9},{"ID":10},{"ID":11},{"ID":12},{"ID":13},{"ID":14},{"ID":15},{"ID":16},{"ID":17},{"ID":18},{"ID":19},{"ID":20},{"ID":21}]
</pre></body></html>
我希望我能理解问题。我们在谈论版本 8.x 吗?对我来说,这似乎是默认设置。使用此代码作为路由处理程序,
folders: {
handler: function( request, reply ) {
'use strict';
reply({
folders: folders
}).code( 200 );
}
},
正在做
curl http://localhost:3001/folders
我得到以下输出
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3001 (#0)
> GET /folders HTTP/1.1
> User-Agent: curl/7.37.1
> Host: localhost:3001
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8
< cache-control: no-cache
< content-length: 266
< accept-ranges: bytes
< Date: Tue, 03 Feb 2015 23:19:31 GMT
< Connection: keep-alive
<
{folders ..... }
此外,请注意我只调用 reply()
而不是 return reply()
HTH
使用 hapi 的 reply(data)
并传递 data
对象将为您完成这项工作。在内部,hapi 将创建适当的 JSON 数据对象并响应它。
how to reply JSON for a given request using hapi 上有一个教程可能会提供更多见解。
对于 v17 及更高版本,删除了 reply() 接口。现在处理程序使用异步函数,您可以 return 值。
来自 hapi docs 示例:
// Before
const handler = function (request, reply) {
return reply('ok');
};
// After
const handler = function (request, h) {
return 'ok';
};
使用 v17 及更高版本,仅返回裸字符串不会导致 json 编码回复。
使用 return JSON.stringify()
确保字符串是 json 编码的
例如
function (request, h) {
return JSON.stringify('ok');
};
如何调整 Hapi 回复功能,使其只回复 JSON 个对象? 我应该把它原样发送然后发送吗?好像没找到好的例子
这里是一些编辑 - 添加了一些示例代码以了解发生了什么。
路线:
server.route({
method: 'GET',
path: '/user/',
handler: function (request, reply) {
var ids = null;
mysqlConnection.query('SELECT ID FROM Users;',function(err,rows,fields){
if(err) throw err;
ids = rows;
// console.log(ids);
reply(ids);
});
}
});
回复:
<html><head></head><body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">[{"ID":1},{"ID":2},{"ID":3},{"ID":4},{"ID":5},{"ID":6},{"ID":7},{"ID":8},{"ID":9},{"ID":10},{"ID":11},{"ID":12},{"ID":13},{"ID":14},{"ID":15},{"ID":16},{"ID":17},{"ID":18},{"ID":19},{"ID":20},{"ID":21}]
</pre></body></html>
我希望我能理解问题。我们在谈论版本 8.x 吗?对我来说,这似乎是默认设置。使用此代码作为路由处理程序,
folders: {
handler: function( request, reply ) {
'use strict';
reply({
folders: folders
}).code( 200 );
}
},
正在做
curl http://localhost:3001/folders
我得到以下输出
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3001 (#0)
> GET /folders HTTP/1.1
> User-Agent: curl/7.37.1
> Host: localhost:3001
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8
< cache-control: no-cache
< content-length: 266
< accept-ranges: bytes
< Date: Tue, 03 Feb 2015 23:19:31 GMT
< Connection: keep-alive
<
{folders ..... }
此外,请注意我只调用 reply()
而不是 return reply()
HTH
使用 hapi 的 reply(data)
并传递 data
对象将为您完成这项工作。在内部,hapi 将创建适当的 JSON 数据对象并响应它。
how to reply JSON for a given request using hapi 上有一个教程可能会提供更多见解。
对于 v17 及更高版本,删除了 reply() 接口。现在处理程序使用异步函数,您可以 return 值。
来自 hapi docs 示例:
// Before
const handler = function (request, reply) {
return reply('ok');
};
// After
const handler = function (request, h) {
return 'ok';
};
使用 v17 及更高版本,仅返回裸字符串不会导致 json 编码回复。
使用 return JSON.stringify()
确保字符串是 json 编码的
例如
function (request, h) {
return JSON.stringify('ok');
};