假设我有一个叫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文件的基本导入。
要把“工具”变成一个模块,我一点也不觉得困难。尽管有其他的答案,我仍然建议使用module.exports:
//util.js
module.exports = {
myFunction: function () {
// your logic in here
let message = "I am message from myFunction";
return message;
}
}
现在我们需要将这个exports分配到全局作用域(在你的应用程序|index|server.js中)
var util = require('./util');
现在你可以引用和调用函数为:
//util.myFunction();
console.log(util.myFunction()); // prints in console :I am message from myFunction
Node.js中的vm模块提供了在当前上下文中(包括全局对象)执行JavaScript代码的能力。看到http://nodejs.org/docs/latest/api/vm.html vm_vm_runinthiscontext_code_filename
请注意,到今天为止,vm模块中有一个错误,它阻止runInThisContext在从新上下文调用时执行正确的操作。只有当你的主程序在一个新的上下文中执行代码,然后该代码调用runInThisContext时,这才重要。参见https://github.com/joyent/node/issues/898
遗憾的是,Fernando建议的with(global)方法不适用于“function foo(){}”这样的命名函数。
简而言之,这是一个适用于我的include()函数:
function include(path) {
var code = fs.readFileSync(path, 'utf-8');
vm.runInThisContext(code, path);
}
要把“工具”变成一个模块,我一点也不觉得困难。尽管有其他的答案,我仍然建议使用module.exports:
//util.js
module.exports = {
myFunction: function () {
// your logic in here
let message = "I am message from myFunction";
return message;
}
}
现在我们需要将这个exports分配到全局作用域(在你的应用程序|index|server.js中)
var util = require('./util');
现在你可以引用和调用函数为:
//util.myFunction();
console.log(util.myFunction()); // prints in console :I am message from myFunction
下面是一个简单明了的解释:
Server.js内容:
// Include the public functions from 'helpers.js'
var helpers = require('./helpers');
// Let's assume this is the data which comes from the database or somewhere else
var databaseName = 'Walter';
var databaseSurname = 'Heisenberg';
// Use the function from 'helpers.js' in the main file, which is server.js
var fullname = helpers.concatenateNames(databaseName, databaseSurname);
Helpers.js内容:
// 'module.exports' is a node.JS specific feature, it does not work with regular JavaScript
module.exports =
{
// This is the function which will be called in the main file, which is server.js
// The parameters 'name' and 'surname' will be provided inside the function
// when the function is called in the main file.
// Example: concatenameNames('John,'Doe');
concatenateNames: function (name, surname)
{
var wholeName = name + " " + surname;
return wholeName;
},
sampleFunctionTwo: function ()
{
}
};
// Private variables and functions which will not be accessible outside this file
var privateFunction = function ()
{
};