Node.js nodejs访问主脚本上下文

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的脚本方法或变量

例如,假设我在主脚本中启动了一个logger对象,并且我包含了另一个js文件,它需要访问logger。我如何做到这一点,而不将记录器注入到包含的脚本中

//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