2017-08-02 121 views
0

我想從一個mongo數據庫獲取數據,然後將其作爲短信發送。 這裏是我的代碼:貓鼬承諾不解決

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 
      } 
     }) 
    }); 
    }) 
} 

我的短信服務調用返回的套接字掛斷。如果我更改表格說 form: { From: '123456789', To: '987654321', Body: "data.url" }

它的工作原理是因爲我沒有試圖解決「數據」 我在做什麼錯了?

+0

可能不解決'請求',其實應該返回一個承諾?從這裏看這條路。所以你需要另一個'.then()'然後實際上使用'res.send()'或'res.json()',否則url請求就會掛在那裏。 –

+0

@NeilLunn你是對的。謝謝!不幸的是,我剛剛發表評論,所以不能給你答案。如果你想要信用,請提交答案。此外,它失敗了,因爲當我將數據傳遞到表單時,它不知道如何解析它。一位朋友向我指出。如果我把JSON.stringify(數據),那麼發佈請求工作。 – fowler

回答

1

你必須使用一個承諾庫如q,bluebird來提交請求模塊。

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

否則使用request-promise,我希望返回promise。

+0

謝謝你的回答。這不是我所需要的,但我確實發現了更多關於藍鳥的信息。這似乎是插入貓鼬的好選擇。貓鼬執行函數返回一個承諾,但貓鼬強烈建議你插入你想要的承諾框架。 – fowler

+0

mongoose默認使用mpromise,它已被棄用,並給你警告注入自己的承諾庫和藍鳥有噸的功能,並使您的代碼看起來更乾淨 –