gpt4 book ai didi

node.js - 重新调整可选路由参数

转载 作者:IT老高 更新时间:2023-10-28 23:01:02 25 4
gpt4 key购买 nike

您好,我遇到了 restify.io 的路由问题

restify 似乎不像 express.js 那样支持可选参数的 "?"

server.get('/users',function(req,res,next){});
server.get('/users/:id',function(req,res,next{});

// I even tried server.get('/users/',function(req,res,next){});

所以当我运行时一切都按预期工作

1

http://localhost/users

显示我所有的用户

2

http://localhost/users/1 

显示 id 为 1 的用户

http://localhost/users/ //(note trailing slash)

找不到资源失败,因为这个被解释为空参数而不是路由#1

我不想检查每个参数的空参数并重定向或传递到下一个...

这似乎是一件常见的事情,也应该打击其他人......所以你怎么看待在 url 中没有得到 404 训练斜线

最佳答案

您需要在代码开头附近的某处添加 restify.pre.sanitizePath():

var restify = require('restify');

var server = restify.createServer();
server.pre(restify.pre.sanitizePath()); // Add this line

更多详情,看这个Github Issue .关于 ReST 的原始论文表明斜线具有特殊含义,但是,ReST 不是标准,只是一个指南。因此,斜线的使用/省略取决于 API 设计者的偏好和 API 的语义。一致性是唯一重要的事情。

我模拟并测试了您的设置,并确认可以按照描述解决您的问题:

var restify = require('restify');

var server = restify.createServer();
server.pre(restify.pre.sanitizePath());

var users = [
{ id: 1, name: 'Sean' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Ana' }
]

server.get('/users', function (req, res, next) {
console.log(req.query());
res.send(users);
});

server.get('/users/:id', function (req, res, next) {
var user = users.filter(function (user) {
return user.id === req.params.id;
});
res.send(user);
});

server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});

HTTP 测试:

$ curl localhost:8080/users <- Returns all users
$ curl localhost:8080/users/ <- Returns all users
$ curl localhost:8080/users/1 <- Returns user with id 1
$ curl localhost:8080/users?name=sean <- Logs querystring
$ curl localhost:8080/users/?name=sean <- Logs querystring

关于node.js - 重新调整可选路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20662656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com