在Node.js中,我如何从其他文件“包含”功能?
假设我有一个名为app.js的文件。 很简单:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
如果我在“tools.js”中有一个函数,该怎么办? 我将如何导入它们以在apps.js中使用?
或者......我应该把“工具”变成一个模块,然后需要它吗? <<似乎很难,我宁愿做tools.js文件的基本导入。
你可以要求任何js文件,你只需要声明你想要公开的内容。
// tools.js
// ========
module.exports = {
foo: function () {
// whatever
},
bar: function () {
// whatever
}
};
var zemba = function () {
}
并在您的应用程序文件中:
// app.js
// ======
var tools = require('./tools');
console.log(typeof tools.foo); // => 'function'
console.log(typeof tools.bar); // => 'function'
console.log(typeof tools.zemba); // => undefined
如果尽管有其他所有答案,但您仍然希望传统上将文件包含在node.js源文件中,则可以使用以下命令:
var fs = require('fs');
// file is included here:
eval(fs.readFileSync('tools.js')+'');
+''
是将文件内容作为字符串而不是对象获取的必要条件.toString()
如果您愿意,也可以使用.toString()
)。 include()
实用程序函数或类似的东西)。 请注意,在大多数情况下,这是不好的做法,你应该写一个模块。 但是,在极少数情况下,您本地环境/名称空间的污染是您真正想要的。
更新2015-08-06
请注意,这不适用于"use strict";
(当您处于“严格模式”时),因为导入的代码无法访问“导入”文件中定义的函数和变量。 严格模式强制执行一些由较新版本的语言标准定义的规则。 这可能是避免此处所述解决方案的另一个原因。
您不需要新功能和新模块。 如果不想使用名称空间,只需执行要调用的模块即可。
在tools.js中
module.exports = function() {
this.sum = function(a,b) { return a+b };
this.multiply = function(a,b) { return a*b };
//etc
}
在app.js中
或者像myController.js之类的任何其他.js文件中:
代替
var tools = require('tools.js')
这迫使我们使用名称空间并调用tools.sum(1,2);
等工具tools.sum(1,2);
我们可以简单地致电
require('tools.js')();
接着
sum(1,2);
在我的情况下,我有一个控制器ctrls.js文件
module.exports = function() {
this.Categories = require('categories.js');
}
在require('ctrls.js')()
之后,我可以在每个上下文中使用Categories
作为公共类。
上一篇: In Node.js, how do I "include" functions from my other files?