假设我有一个名为 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 文件中:
// 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()
实用程序函数或类似的东西)。 请注意,在大多数情况下,这是不好的做法 ,您应该编写一个模块 。但是,在极少数情况下,您本地上下文 / 命名空间的污染是您真正想要的。
还请注意,这不适用于"use strict";
(当您处于“严格模式” 时 ),因为执行导入的代码无法访问 “导入” 文件中定义的函数和变量。严格模式强制执行由较新版本的语言标准定义的某些规则。这可能是避免此处描述的解决方案的另一个原因。
您不需要新功能或新模块。如果您不想使用命名空间,则只需执行您正在调用的模块。
module.exports = function() {
this.sum = function(a,b) { return a+b };
this.multiply = function(a,b) { return a*b };
//etc
}
或者像 myController.js 这样的任何其他. js:
代替
var tools = require('tools.js')
强制我们使用命名空间并调用tools.sum(1,2);
我们可以简单地打电话
require('tools.js')();
然后
sum(1,2);
在我的情况下,我有一个控制器ctrls.js的文件
module.exports = function() {
this.Categories = require('categories.js');
}
我可以在每个上下文中使用Categories
作为公共类之后的require('ctrls.js')()