深入研究节点,我有一个关于包含的脚本如何访问主脚本方法或变量的问题
例如,假设我在主脚本中启动了一个记录器对象,并且我包含另一个 js 文件,该文件需要访问记录器。我该怎么做,而不将记录器注入到包含的脚本。
//main node script
var logger = require('logger'),
app = require("./app.js")
//app.js
function something(){
//access logger here !!!!!!!
}
exports.something = something
希望清楚
谢谢
尝试执行以下操作:
//main node script
var logger = require('logger'),
app = require("./app.js")(logger);
//app.js
var something = function (logger){
logger.log('Im here!');
}
module.exports = exports = something;
编辑:
如果要将主应用程序的代码拆分为不同的文件,可以在主脚本文件上执行以下操作:(这就是我将主应用程序拆分的方式.js分为不同的部分)
// main app.js
express = require('express');
...
/* Routes ---------------------*/
require('./config/routes')(app);
/* Socket IO init -------------*/
require('./app/controllers/socket.io')(io);
/* Your other file ------------*/
require('./path/to/file')(app);
...
// config/routes.js
module.exports = function(app){
app.configure(function(){
app.get('/', ...);
...
}
}
// app/controllers/socket.io.js
module.exports = function(io){
// My custom socket IO implementation here
}
// ...etc
编辑 2:
您的函数还可以返回一个 JS 对象,以防您想在主应用程序上执行某些操作.js使用自定义脚本。
例:
// main app.js
...
/* Some controller ---------------------*/
var myThing = require('./some/controller')(app);
myThing.myFunction2('lorem'); // will print 'lorem' on console
...
// some/controller.js
// Your function can also return a JS object, in case you want to do something on the main app.js with this require
var helperModule = require('helperModule');
module.exports = function(app){
var myFunction = function(){ console.log('lorem'); }
// An example to export a different function based on something
if (app.something == helperModule.something){
myFunction = function() { console.log('dolor'); }
}
return {
myFunction: myFunction,
myFunction2: function(something){
console.log(something);
}
}
}
您也可以简单地导出函数或包含函数的对象,而无需发送任何参数,如下所示:
// main app.js
...
var myModule = require('./path/to/module');
myModule.myFunction('lorem'); // will print "lorem" in console
...
// path/to/module.js
module.exports = {
myFunction: function(message){ console.log(message); },
myFunction2: ...
}
基本上,无论你放在module.exports里面的东西都是在require()函数之后返回的。
module.exports 是require
文件时返回的内容。 @DavidOliveros示例中,这是一个将app
或io
作为参数的函数。 该函数在请求发生后立即执行。
如果要向主数据库公开包含脚本的方法,请尝试以下操作:
// child.js
module.exports = function(app){
var child = {};
child.crazyFunction = function(callback){
app.explode(function(){
callback();
});
};
child.otherFunction = function(){};
return child;
};
// app.js
var express = require('express');
var app = module.exports = express();
var child = require('./child.js')(app);
app.get('/', function(req, res){
child.crazyFunction(function(){
res.send(500);
});
});