Node.js nodejs访问主脚本上下文
深入节点,我有一个问题,关于一个包含的脚本如何访问main的脚本方法或变量 例如,假设我在主脚本中启动了一个logger对象,并且我包含了另一个js文件,它需要访问logger。我如何做到这一点,而不将记录器注入到包含的脚本中Node.js nodejs访问主脚本上下文,node.js,dependency-management,Node.js,Dependency Management,深入节点,我有一个问题,关于一个包含的脚本如何访问main的脚本方法或变量 例如,假设我在主脚本中启动了一个logger对象,并且我包含了另一个js文件,它需要访问logger。我如何做到这一点,而不将记录器注入到包含的脚本中 //main node script var logger = require('logger'), app = require("./app.js") //app.js function something(){ //access logger her
//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;
编辑:
如果要将主应用程序的代码拆分为不同的文件,可以在主脚本文件上执行以下操作:(这就是我将主app.js拆分为不同部分的方式)
编辑2: 如果您想使用自定义脚本在主app.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()函数之后返回的内容。尝试执行以下操作:
//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;
编辑:
如果要将主应用程序的代码拆分为不同的文件,可以在主脚本文件上执行以下操作:(这就是我将主app.js拆分为不同部分的方式)
编辑2: 如果您想使用自定义脚本在主app.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
为参数的函数。该功能在需求发生后立即执行
如果要将包含脚本的方法公开给main,请尝试以下操作:
// 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);
});
});
module.exports是当您
需要文件时返回的内容。在@DavidOliveros示例中,这是一个以app
或io
为参数的函数。该功能在需求发生后立即执行
如果要将包含脚本的方法公开给main,请尝试以下操作:
// 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);
});
});
谢谢没有注入依赖就没有办法?如果您需要访问多个模块,则可能会出现混乱。您必须手动发送希望在拆分文件(如app对象)上保持一致的对象,但也可以在包含文件上调用var myModule=require('myModule')
,而无需在主app.js脚本上调用它们。这样,您只需要在每个拆分文件上使用的模块。谢谢。你能详细说明module.exports=function()吗。。陈述我理解,通过这种方式,您可以配置服务。但是如果您还想将包含脚本的方法公开给main,那么该如何实现呢?当然*看看你的银行。没有注入依赖就没有办法?如果您需要访问多个模块,则可能会出现混乱。您必须手动发送希望在拆分文件(如app对象)上保持一致的对象,但也可以在包含文件上调用var myModule=require('myModule')
,而无需在主app.js脚本上调用它们。这样,您只需要在每个拆分文件上使用的模块。谢谢。你能详细说明module.exports=function()吗。。陈述我理解,通过这种方式,您可以配置服务。但是如果您还想将包含脚本的方法公开给main,那么该如何实现呢?当然*看看编辑2