簡體   English   中英

Express GET路由不適用於參數

[英]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/58e395a8c6aaca2560089c‌​e7 )來更改請求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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM