Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js node/express REST API应用程序-传递参数以获取方法_Node.js_Rest_Express - Fatal编程技术网

Node.js node/express REST API应用程序-传递参数以获取方法

Node.js node/express REST API应用程序-传递参数以获取方法,node.js,rest,express,Node.js,Rest,Express,背景 为了学习,我正在编写一个示例nodejs/expressrest接口或API。我已经创建了一条叫做“紧急”的新路线 在该文件中,我有以下代码: router.get('/', function(req, res, next) { //var ip = req.params.ip; res.send('respond with a resource'); }); 当我启动应用程序并导航到 一切正常,我看到了“用资源响应”的消息 目标 我希望我的应用程序也能够

背景

为了学习,我正在编写一个示例nodejs/expressrest接口或API。我已经创建了一条叫做“紧急”的新路线

在该文件中,我有以下代码:

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/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/{id}
 http://myserver/tutorial1/emergency/all
现在,当我运行应用程序并浏览到

 http://myserver/tutorial1/emergency/12345
它起作用了。但是,浏览到

  http://myserver/tutorial1/emergency 
失败并显示404错误消息

找不到

404

我是否需要创建两个单独的方法,一个接受参数,另一个不接受参数?(又称方法重载?) 也许我对REST的理解是错误的。GET请求应该如下所示:

 http://myserver/tutorial1/emergency
还是应该总是这样:

router.get('/id', function(req, res, next) {
        //var ip = req.params.ip;
        res.send('respond with a resource');
});
 http://myserver/tutorial1/emergency/{id}
 http://myserver/tutorial1/emergency/all
可能对所有记录执行GET的正确方法如下:

router.get('/id', function(req, res, next) {
        //var ip = req.params.ip;
        res.send('respond with a resource');
});
 http://myserver/tutorial1/emergency/{id}
 http://myserver/tutorial1/emergency/all
我现在也在尝试用谷歌搜索我的问题,但我很难简洁地表达出来,以获得准确的搜索结果集

编辑1

当我尝试创建两个方法时,我的代码就是这样的(这是可行的)

但这感觉很奇怪,因为我想我已经习惯了其他语言中的其他框架,在这些框架中,系统可以检查空参数,所以您只需要一个方法。 这不是抱怨!这也许可以解释为什么我的大脑“期望”系统以不同的方式工作

我是否需要创建两个单独的方法,一个接受参数 还有一个没有

我猜你在尝试之前就发布了这个

答案是肯定的

接受参数的路由应如下所示:

app.get('/emergency/:id', function (req, res, next) {
    var id = req.params.id;
    console.log('The id: ' + id);
});

我不确定它是否有效你可以试试这样的东西

app.get('/emergency/:var(:id/|)', function (req, res, next) {
    var id = req.params.id;
    console.log('The id: ' + id);
});

是的,必须有两个不同的函数来监听每种类型的url。 这是因为 网址

http://localhost/example/abcd will get received in 
router.get('/example/:username',testFunction1);
鉴于

http://localhost/example will be received in 
router.get('/example',testFunction2);
请参阅本条:
有关通过Nodejs中的GET方法获取参数的过程的详细说明。

没有,我已经尝试过了。但因为我是一个node-js-noob,我怀疑我的方法是否正确。我也错过了你在这里的“:”。如果我有一个routes/emergency.js文件,其中包含所有这些逻辑,那么我是否真的需要您在答案中的“/emergency/:id”中的“emergency”?我想我不知道你编辑的代码很好。我不明白你评论中的第二个问题。两条路线的方法很好,很简单,也很有效。Tom,请参阅我原始问题中的“编辑1”部分不确定你还想要什么-Express不是关于他们如何改变路线,因为你的大脑期望系统以不同的方式工作。lol。汤姆,我意识到了。我想你没有抓住我问题的重点。由于我对该工具缺乏经验,我要求验证我目前对如何使用该工具的理解。谢谢你的建议!我尝试了一下,当我没有参数的时候,它就工作了。但当我通过parm时,它以404失败。如果express/node不是按此方式设计的。。。没关系。我只是想了解设计我的应用程序的“正确”方法是什么。