我目前正在与hapi合作,而且我遇到了一个问题,我似乎找不到任何解决方案或之前提及的问题。当我发送以下请求时,我的第一个查询参数只在request.query对象中。
curl -H "Content-Type: application/json" -X PUT https://localhost:3000/lists/{username}/{listname}?token='token'&resource_id='resource_id'
将{}
和''
中的项目替换为实际名称。
我的路线目前是这样写的
server.route({
method: 'PUT',
path: '/lists/{username}/{listname}',
handler: function(request, reply) {
const username = encodeURIComponent(request.params.username);
const listname = encodeURIComponent(request.params.listname);
const resource_id = request.query.resource_id;
const token = request.query.token;
console.log(request.query);
verify(token, username, {callback}, listname, resource_id, reply);
}
});
console.log
电话会产生
{ token: 'token' }
如果我做console.log(resource_id)
我得到"未定义"在控制台中。 hapi的文档声明所有查询参数都应该在request.query
对象中找到。出于某种原因,这不会发生。我查看了hapijs文档,查看了我的API调用,并且我已经阅读了人们处理查询参数的示例。知道这里发生了什么吗?
答案 0 :(得分:1)
问题在于你的curl命令不是HapiJS。
尝试跑步
curl -H "Content-Type: application/json" -X PUT "https://localhost:3000/lists/{username}/{listname}?token=token&resource_id=resource_id"
查询字符串中的&符号被解释为命令的结尾。有关命令无法工作的原因,请参阅this questions answer
答案 1 :(得分:0)
问题在于发出卷曲请求。 curl请求中有&
,URL不在引号中;所以&
变成了一个被修改的shell来启动一个分离的进程。你的路线工作正常,只需用引号中的URL点亮卷曲
curl -H "Content-Type: application/json" -X PUT "https://localhost:3000/lists/{username}/{listname}?token='token'&resource_id='resource_id'"
答案 2 :(得分:0)
如果您想从查询参数获取数据,那么您应该在下面的代码中执行以下操作:
server.route({
method: 'PUT',
path: '/lists/{username}/{listname}',
validate: {
params: {
username: Joi.string().min(1).max(15).required(),
listname:Joi.string().min(1).max(15).required(),
},
query: {
token: Joi.number().integer().min(1).max(100).required(),
resource_id: Joi.number().integer().min(1).max(100).required(),
}
},
handler: function (request, reply) {
const username = encodeURIComponent(request.params.username);
const listname = encodeURIComponent(request.params.listname);
const resource_id = request.query.resource_id;
const token = request.query.token;
console.log(request.query);
verify(token, username, {callback}, listname, resource_id, reply);
reply("Hello There..");
}
您可以使用上面的代码来获取参数/查询数据。