node.js – Express GET路由不适用于参数

我是Express和Mongoose的新手.我目前正在开发我的第一个项目,这不是一个教程,我遇到了一个问题.

我有多个路由,它们在index.js中定义如下:

app.use('/api/client',require('./routes/client'));
app.use('/api/host',require('./routes/host'));

在路由中,有多个动词可用,如PUT和POST.
这是一条有问题的路线(我正在尝试做更多这里介绍的内容,但这里介绍的内容不起作用):

router.get('/ama/:id',function (req,res,next) {
    Ama.findById(req.params.id).then(function(Ama){
        res.send(Ama);
    });
});

这应该有用,对吗?它应该使用该id返回数据库中的文档.我检查过该文件是否存在,可能大概是100次.
现在,如果我大大简化路由,删除id,并做出简单的响应,路由工作:

router.get('/ama',next) {
    res.send({type:"GET"});
});

它是如此奇怪,只要我添加参数,我得到一个

<pre>Cannot GET /api/host/ama</pre>

在邮递员.

有任何想法吗? Mongod正在运行,我的其他路线正在运行.

解决方法

看起来您正在尝试检索此网址:

/api/host/ama?id=SOMEID

但是,您有一个为URL声明的路由,如下所示:

/api/host/ama/SOMEID

换句话说,id是URL路径的一部分,并且不作为查询字符串参数传递(这就是/:id表示:它是路由应该匹配的URL的一部分的占位符).

因此,要么通过将id添加到路径(/ api / host / ama / 58e395a8c6aaca2560089c e7)来更改请求URL,要么将路由处理程序重写为以下内容

router.get('/ama',next) {
    Ama.findById(req.query.id).then(function(Ama){
        res.send(Ama);
    });
});

但是,我建议使用前者(将URL作为URL的一部分).

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...