在使用express JS的Node应用程序中,如何包含和运行单独的JS文件?

时间:2015-05-17 23:16:36

标签: javascript node.js express web-applications

我有一个javascript文件,其中包含一些获取RSS源并将内容保存在数据库中的函数。我最初是由HTML页面调用它,但我希望这个文件始终在后端运行(从RSS源获取更新并将其保存到数据库)。

我的问题是,如何在我的应用中附加并运行此单独的JavaScript?我认为它看起来像这样:

在app.js中:

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

这不行。另外,我的app.js中声明的变量是否可以在RSSReader.js中找到?

感谢。

1 个答案:

答案 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();