Hap*_*ays 8 rest node.js express
背景
我正在编写一个示例nodejs/express REST接口或API用于学习目的.我创建了一条名为"紧急"的新路线.
在文件中我有以下代码:
router.get('/', function(req, res, next) {
//var ip = req.params.ip;
res.send('respond with a resource');
});
Run Code Online (Sandbox Code Playgroud)
当我启动应用程序并导航到http:// myserver/tutorial1/emergency时, 一切正常,我看到"用资源响应"消息.
目标
我希望我的应用程序也能够接受参数.例如,当用户导航到时
http://myserver/tutorial1/emergency
Run Code Online (Sandbox Code Playgroud)
我希望查询并返回所有紧急号码.但他们也应该能够做到这一点:
http://myserver/tutorial1/emergency/12345
Run Code Online (Sandbox Code Playgroud)
并且系统应该在数据库中查询紧急记录12345并返回适当的结果集.
问题/问题
为了适应两种类型的GET查询,我将代码更改为如下所示:
router.get('/id', function(req, res, next) {
//var ip = req.params.ip;
res.send('respond with a resource');
});
Run Code Online (Sandbox Code Playgroud)
现在,当我运行应用程序,并浏览到
http://myserver/tutorial1/emergency/12345
Run Code Online (Sandbox Code Playgroud)
有用.但是,浏览到
http://myserver/tutorial1/emergency
Run Code Online (Sandbox Code Playgroud)
失败并显示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)
Run Code Online (Sandbox Code Playgroud)
我是否需要创建两个单独的方法,一个接受参数,另一个不接受?(又名方法重载?)也许我对REST的理解是错误的.GET请求应该是这样的:
http://myserver/tutorial1/emergency
Run Code Online (Sandbox Code Playgroud)
或者它应该总是这样:
http://myserver/tutorial1/emergency/{id}
Run Code Online (Sandbox Code Playgroud)
也许为所有记录执行GET的正确方法是这样的:
http://myserver/tutorial1/emergency/all
Run Code Online (Sandbox Code Playgroud)
我现在也试着谷歌我的问题,但我很难简单地表达它,以获得准确的搜索结果集.
编辑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');
});
Run Code Online (Sandbox Code Playgroud)
但这只是感觉奇怪,因为我想我习惯了其他语言的其他框架,系统可以检查空参数,所以你只需要一个方法.这不是抱怨!只是一个评论可以解释为什么我的大脑"期望"系统以不同的方式工作.
Tom*_*Tom 11
我是否需要创建两个单独的方法,一个接受参数,另一个不接受?
我猜你甚至在尝试之前发布了这个?
答案是肯定的.
您接受参数的路由应如下所示:
app.get('/emergency/:id', function (req, res, next) {
var id = req.params.id;
console.log('The id: ' + id);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12728 次 |
| 最近记录: |