2016-11-07 60 views
0

所以我有一個角度控制器,在按下按鈕後成功發出http請求。我有一個node.js服務器運行,它獲取請求,然後發回YOU HAVE SUCCEEDED! HTTP REQUEST RECEIVED!。我希望在收到請求時執行一個函數,但函數存在於./Source/Server/test.js中的文件夾中的一個文件中。使用express.js在接收到一個http請求後執行一個函數?

如何告訴我的server.js文件發送命令來運行該函數?

server.js:

var express = require('express'); 
var app = express(); 
var fs = require('fs'); 
app.use(express.static(__dirname + '/Source/Client/Templates')); 
app.use(express.static(__dirname + '/')); 
app.get('/', function (req, res) { 
    res.sendFile('/Source/Client/Templates/Home.html', {root: __dirname }); 
}); 
app.get('/ThisIsATest', function (req, res) { 
    res.send('YOU HAVE SUCCEEDED! HTTP REQUEST RECEIVED!') 
}) 
app.listen(3000); 
console.log("running at port 3000"); 

test.js:

var run = require('./quickstart.js'); 
run.runQuickstart(); 

控制器:

angular.module('DaycareApp').controller('WaitingListController', ['$scope', '$http', function($scope, $http){ 
    $scope.test = function() { 
     $http.get('/ThisIsATest') 
     .then(function(response) { 
      alert(response.data); 
     }); 
    }; 
}]); 
+0

聽起來好像你想在你調用'res.send(...)'之前把'test.js'的內容移動到處理程序中。 –

+0

@ChrisG 所以沿着線的東西: 'VAR runQuickstart =需要( './來源/服務器/ quickstart.js ');' 'app.get('/ ThisIsATest',函數(REQ, res,runQuickstart)' '{runQuickstart.runQuickstart();})' 應該這樣做嗎?它說runQuickstart()不是一個函數,但也許我通過錯誤或東西的變量.... – Ryan

回答

2

在test.js可以導出你的模塊這樣

var run = require('./quickstart.js'); 

function mySpecialFunction() { 
    return run.runQuickstart(); 
} 

module.exports = { 
    mySpecialFunction: mySpecialFunction 
}; 

現在,在您server.js或任何你的控制器,你可以通過inluding test.js你的模塊使用需要調用該函數。

var test = require('./test.js'); 

app.get('/ThisIsATest', function (req, res) { 
    res.send(test.mySpecialFunction()); 
}); 
+0

只是想着這些線,但你的答案包裝原始比我更好:-) – JohnnyCoder

+0

@KiwiHaxer謝謝你的幫助!這工作很好:)是否還有一種方法可以在同一時間發回消息..?如果我做'res.send('你已成功!!HTTP REQUEST RECEIVED!'+ test.mySpecialFunction());'來自控制器的警報給出''你已成功!HTTP請求已收到!undefined'' – Ryan

+0

yes just make確定你在mySpecialFunction中返回一個值。我已經更新了答案以向你展示。 – RedJandal

2

您可以要求test.js作爲文件公開必要的後功能,如下所示:

// test.js 
// ======== 
var run = require('./quickstart.js'); 

module.exports = { 
    run: function() { 
    run.runQuickstart(); 
    } 
}; 

server.js,要求其:

var test = require('./Source/Server/test'); 

,並使用它:test.run()

2

你能不能做這樣的事情:

server.js

var express = require('express'); 
var app = express(); 
var fs = require('fs'); 
var run = require('./path/to/quickstart.js'); 

// ... 

app.get('/ThisIsATest', function (req, res) { 
    run.runQuickstart(); 
    res.send('YOU HAVE SUCCEEDED! HTTP REQUEST RECEIVED!') 
}) 

// ... 

然後在test.js:

var run = require('./quickstart.js'); 

exports.runQuickstart = function() { 
    run.runQuickstart(); 
}; 
2

您可以要求文件

var outsideFunction = require(__dirname + '/Source/Server/test.js'); 

然後將其添加到路線。

app.get('/ThisIsATest', function (req, res) { 
     outsideFunction(req, res); 
     res.send('YOU HAVE SUCCEEDED! HTTP REQUEST RECEIVED!') 
}) 
+0

我可以用它來運行異步函數後發回一個對象嗎? [這是一篇關於我目前遇到的問題的文章,我很好奇,看看你對這個問題的回答是否有助於解決這個問題](https://www.reddit.com/r/node/評論/ 5coezh/httpexpresssqlite3_having_some_issues_responding /) – Ryan

+0

如果你想發回一個對象,你需要從app.get中移除res.send並將其添加到outsideFunction中。雖然該函數是異步的,但http調用只能有1個返回。 – Mattliff

相關問題