我有一个javascript文件,其中包含一些获取RSS源并将内容保存在数据库中的函数。我最初是由HTML页面调用它,但我希望这个文件始终在后端运行(从RSS源获取更新并将其保存到数据库)。
我的问题是,如何在我的应用中附加并运行此单独的JavaScript?我认为它看起来像这样:
在app.js中:
var RSSReader = require('./public/javascripts/RSSReader.js');
RSSReader.SomeFunction();
这不行。另外,我的app.js中声明的变量是否可以在RSSReader.js中找到?
感谢。
答案 0 :(得分: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();