2017-10-20 52 views
1

我正在創建一個小鏈接縮短應用程序。這是Express.js POST函數。我想發送一個包含新網址和數據庫中當前文檔數量的文檔。這主要是爲了確保每個網站都與一個唯一的短號碼相關聯。如何在node.js中的promise中發送res.send?

app.post('/api/shorturl/new', (req, res) => { 
    var body = _.pick(req.body, ['url']);   // url attached to body.url with lodash 

    Link.find({}).exec((err, res) => {   // Link is a mongoose model 
    var count = res.length; 
    var newSite = new Link({ website: body.url, count }); 
    newSite.save((err) => { 
     if (err) console.log(err); 
    }) 
    res.send(newSite); 
    }); 
}); 

當程序進入res.send(newSite)時,控制檯說res.send不是函數。這是因爲它符合諾言,但我不確定如何解決問題並保持代碼的正常運行。我怎樣才能得到回覆發送?

謝謝!

+1

這不是因爲它在承諾中,這是因爲你在傳遞給exec()' –

+0

Aha的回調函數中的參數之一使用相同的名稱來映射正確的'res'。你是對的! –

回答

2

這不是你需要的res。它被內部回調論證所覆蓋。您需要重命名內部res_res例如:

app.post('/api/shorturl/new', (req, res) => { 
    var body = _.pick(req.body, ['url']);   // url attached to body.url with lodash 

    Link.find({}).exec((err, _res) => {   // Link is a mongoose model 
    var count = _res.length; 
    var newSite = new Link({ website: body.url, count }); 
    newSite.save((err) => { 
     if (err) console.log(err); 
    }) 
    res.send(newSite); 
    }); 
}); 
0

很可能你的鏈接功能是壓倒expressjs的資源。嘗試在Link.find({}).exec((err, res) => {中重命名res變量以允許res.send(newSite);使用上面範圍內的res變量。

相關問題