2017-08-02 21 views
0

私はmongo dbからデータを取得しようとしていて、それをsmsとして送信しようとしています。Mongooseは解決しない約束

import mongoose from 'mongoose' 
import mediaModel from '../MediaSchema' 
import requestPromise from 'request-promise' 
var request = require('request'); 

export default (app) => { 
app.get('/sms/:number', (req, res) => { 
    var number = req.params.number; 
    return req.mediaModel 
     .find({'time': number}) 
     .exec() 
     .then(function(data) { 
     return request({ 
      url: 'https://api.twilio.com/2010-04-01/Accounts/<MyId>/Messages', 
      method: 'POST', 
      auth: { 
       user: '<MyID>', 
       pass: '<MyToken>' 
      }, 
      form: { 
       From: '123456789', 
       To: '987654321', 
       Body: data.url 
      } 
     }) 
    }); 
    }) 
} 

私のSMSサービスへの呼び出しがソケットハングアップを返します。 はここに私のコードです。フォームを変更した場合 form: { From: '123456789', To: '987654321', Body: "data.url" }

"データ"を解決しようとしていないために動作します 私は間違っていますか?

+0

実際に約束を返すべきである 'request'を解決していない可能性がありますか?そこから見える。したがって、別の '.then()'が必要になり、 'res.send()'または 'res.json()'を実際に使用してください。そうでなければ、urlリクエストはちょうどハングするでしょう。 –

+0

@NeilLunnあなたは正しいです。ありがとうございました!残念ながら、あなたはちょうどコメントしたので私はあなたに答えを与えることはできません。クレジットを希望する場合は、回答を提出してください。さらに、フォームにデータを渡すと、解析する方法がわからないため、失敗していました。友人はそれを私に指摘しました。 JSON.stringify(データ)を挿入すると、投稿要求が機能しました。 – fowler

答えて

1

あなたはq、bluebirdのような約束のライブラリを使ってリクエストモジュールに約束しなければなりません。

var request = bluebird.promisifyAll(require('request')); 

他にも、約束を返すことを希望するリクエスト - 約束を使用してください。

+0

ありがとうございました。私が必要としていたものではありませんでしたが、ブルーバードについてもっと知りました。それはマングースに栓をする素晴らしい選択のようです。 mongoose exec関数は約束を返しますが、mongooseはあなたが望む約束フレームワークでプラグインを強く提案します。 – fowler

+0

mongooseは、デフォルトで廃止され、あなた自身の約束のライブラリを挿入するよう警告してくれます。ブルーバードには数多くの機能があり、あなたのコードはもっときれいに見えます –

関連する問題