2015-05-17 46 views
0

我有一個JavaScript文件,其中包含一些抓取RSS提要並將內容保存在數據庫中的函數。我最初曾經被HTML頁面調用過,但我希望此文件始終在後端運行(從RSS提要獲取更新並將其保存到數據庫中)。在具有表達JS的Node應用程序中,如何包含並運行單獨的JS文件?

我的問題是,如何在我的應用程序中附加並運行這個單獨的JavaScript?我認爲它看起來就像這樣:

在app.js:

var RSSReader = require('./public/javascripts/RSSReader.js'); 
RSSReader.SomeFunction(); 

這不,雖然工作。另外,我的app.js中聲明的變量是否可以在RSSReader.js中使用?

謝謝。

回答

1

如何在我的應用程序中附加並運行這個單獨的javascript?

你顯示的app.js代碼應該工作得很好。關鍵是,你必須讓你的RSSReader.js文件轉換成在出口它想成爲公衆的功能模塊:

所以,RSSReader.js裏面,你會是這樣的:

module.exports = { 
    someFunction: function() { 
     // code here 
    }, 
    someOtherFunction: function() { 
     // code here 
    } 
}; 

然後,在你的其他的文件,你可以加載模塊,並使用它就像你有:

var RSSReader = require('./public/javascripts/RSSReader.js'); 
RSSReader.someFunction(); 
RssReader.someOtherFunction(); 

node.js中的模塊文件是here

此外,將我的app.js中聲明的變量可用於 RSSReader.js?

不,他們不會,除非您明確聲明app.js變量作爲global對象的屬性。從app.js到另一個模塊共享的通常node.js約定是,您爲RSSReader.js模塊創建了一個初始化方法(您可以稱其爲init),並將它傳遞給它需要的任何上下文(通常是一個具有某些屬性的對象在它上面)從app.js和RSSReader.js模塊可以存儲該上下文供其使用。

所以,如果你想從app.js到RSSReader.js分享一些變量,你可以通過.init()方法類似這樣的分享:

RSSReader.js

var data; 
module.exports = { 
    init: function(options) { 
     data = options; 
    }, 
    someFunction: function() { 
     // code here can access the data variable 
    }, 
    someOtherFunction: function() { 
     // code here can access the data variable 
    } 
}; 

app.js

var RSSReader = require('./public/javascripts/RSSReader.js'); 
RSSReader.init({express: express, db: db}); 
RSSReader.someFunction(); 
RssReader.someOtherFunction(); 
+0

非常好!謝謝你的幫助。我確實能夠通過導出將我的mongo數據庫作爲變量傳遞並加載到init中。非常好的主意,你搖滾。 – Dougyfresh

相關問題