2017-02-18 213 views
0

(我是新來的JS,Node.js和受Heroku的,所以我希望這個問題是清楚的) 我有一個Heroku的Node.js的應用程序,我能Heroku的調度成立每1小時運行一次任務。POST請求不工作

該任務按時運行,並調用方法fireHook()(我可以在控制檯中看到日誌),但請求不起作用(我沒有收到任何錯誤或錯誤)。

這是工作:

#!/usr/bin/env node 

var request = require('request') 


function fireHook(){ 
console.log("firing") 
request({ 
    url: 'https://XXXXXX.herokuapp.com/jobs', 
    method: "POST", 
    headers: { "content-type": "application/json" }, 
    json: {"user_id":{ "id":"ddddd"}} 

}, function(error, response, body) { 
    console.log(response) 
    if (error) { 
     console.log('Error sending messages: ', error) 
    } else if (response.body.error) { 
     console.log('Error: ', response.body.error) 
    } else { 
     console.log('success: ', body) 
     reportToSnitch() 
    } 
}) 
} 
fireHook(); 
process.exit(); 

2個問題:

  1. 爲什麼銷售的要求不工作?
  2. 我目前使用webhook來調用我的主應用程序,有沒有更好的方法直接從腳本調用主應用程序的功能?

感謝

回答

0

我想請求已收到其響應之前你process.exit()是殺你的腳本。嘗試將它移動到回調:

#!/usr/bin/env node 

var request = require('request') 


function fireHook(){ 
console.log("firing") 
request({ 
    url: 'https://XXXXXX.herokuapp.com/jobs', 
    method: "POST", 
    headers: { "content-type": "application/json" }, 
    json: {"user_id":{ "id":"ddddd"}} 

}, function(error, response, body) { 
    console.log(response) 
    if (error) { 
     console.log('Error sending messages: ', error) 
    } else if (response.body.error) { 
     console.log('Error: ', response.body.error) 
    } else { 
     console.log('success: ', body) 
     reportToSnitch() 
    } 
    process.exit(); 
}) 
} 
fireHook(); 

JavaScript是異步的,所以你必須要小心考慮在哪裏以及何時某些事件將會發生。如果您的reportToSnitch()函數也是異步函數,則可能需要在該函數結束時觸發process.exit()