[英]Express GET route will not work with parameters
我是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', function (req, res, 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/58e395a8c6aaca2560089ce7
)來更改請求URL,要么將路由處理程序重寫為以下內容:
router.get('/ama', function (req, res, next) {
Ama.findById(req.query.id).then(function(Ama){
res.send(Ama);
});
});
但是,我建議使用前者(將URL作為URL的一部分)。
這里有兩個問題:
router.get('/ama/:id', function (req, res, next) {
Ama.findById(req.params.id).then(function(Ama){
res.send(Ama);
})
res.send(req.params.id)*/
});
首先, res.send(req.params.id)
將在res.send(Ama);
之前運行res.send(Ama);
它可能會發送整個響應。 您缺少.exec()
方法調用(有關詳細信息,請參閱CédricDeDycker的答案)。 res.send()
只能可靠地使用一次。 也許你想要res.write()
如果你想要多個東西。 此外,您不處理承諾拒絕,因此您不處理數據庫錯誤。 要知道為什么你應該總是處理承諾拒絕,請看這個答案: 我應該避免異步處理Promise拒絕嗎?
該參數應該可以正常工作,但似乎您錯過了將.exec添加到您的查詢中
Ama.findById(req.params.id).exec().then(function(Ama){
res.send(Ama);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.