2017-10-20 11 views
1

私は小さなリンク短縮アプリケーションを作成しています。これは、Express.js POST関数です。私は、新しいURLとデータベースの現在のドキュメント数でドキュメントを送信したいと思います。これは主に、各ウェブサイトが固有の短い番号に関連付けられていることを確認することです。node.jsの約束の中でどのように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に渡されるコールバック関数の引数のうちの1つに同じ名前を使用して、正しい '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年代RESをオーバーライドしている可能性があります。 Link.find({}).exec((err, res) => {のres変数の名前を変更して、res.send(newSite);がその上のスコープのres変数を使用できるようにしてください。

関連する問題