背景
我正在编写一个样例的Node.js/Express REST接口或API,以便学习。我创建了一个名为"emergency"的新路由。
在文件中,我有以下代码:
router.get('/', function(req, res, next) {
//var ip = req.params.ip;
res.send('respond with a resource');
});
当我启动应用程序并导航到http://myserver/tutorial1/emergency时,一切正常,我看到“响应资源”的消息。
目标
我希望我的应用程序也能够接受参数。例如,当用户导航到:
http://myserver/tutorial1/emergency
我希望查询并返回所有紧急电话号码。但同时它们还应该能够做到这一点: http://myserver/tutorial1/emergency/12345
系统应该查询数据库以获取紧急记录12345并返回相应的结果集。
问题 / 问题
为了适应两种类型的GET查询,我已经将代码更改为以下内容:
router.get('/id', function(req, res, next) {
//var ip = req.params.ip;
res.send('respond with a resource');
});
现在当我运行应用程序并浏览到时
http://myserver/tutorial1/emergency/12345
它有效。然而,浏览到
http://myserver/tutorial1/emergency
无法访问,返回404错误信息。
未找到页面。
404
Error: Not Found
at /var/www/html/nodejs_samples/tutorial1/app.js:34:13
at Layer.handle [as handle_request] (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:312:13)
at /var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:280:7
at Function.process_params (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:330:12)
at next (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:271:10)
at /var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:618:15
at next (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:256:14)
at Function.handle (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:176:3)
at router (/var/www/html/nodejs_samples/tutorial1/node_modules/express/lib/router/index.js:46:12)
我需要创建两个不同的方法,一个接受参数,一个不接受吗?(也就是所谓的方法重载吗?)也许我的 REST 理解有误。那么 GET 请求应该是什么样子的呢:
http://myserver/tutorial1/emergency
或者它应该总是看起来像这样:
http://myserver/tutorial1/emergency/{id}
也许获取所有记录的正确方法类似于这样: http://myserver/tutorial1/emergency/all
我现在也正在尝试谷歌搜索我的问题,但我很难简洁地表达它以获得准确的搜索结果。
编辑1
当我尝试创建两个方法时,我的代码看起来像这样(并且这有效)。router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get('/:id', function(req, res, next) {
var id = req.params.id;
console.log(id);
res.send('got it');
});
但是这感觉有些奇怪,因为我猜想我习惯了其他语言中的框架,那里的系统可以检查空参数,所以你只需要一个方法。 这不是抱怨!只是一种可能解释为什么我的大脑“期望”系统以不同的方式工作。