2

ノードに飛び込んで、含まれているスクリプトがメインのスクリプトメソッドまたは変数にアクセスする方法について質問があります

たとえば、メイン スクリプトで開始されたロガー オブジェクトがあり、ロガーへのアクセスが必要な別の js ファイルを含めたとします。含まれているスクリプトにロガーを挿入せずに、どうすればそれを行うことができますか。

//main node script

var logger = require('logger'),
    app = require("./app.js")

//app.js

function something(){
  //access logger here !!!!!!!
}

exports.something = something

それが明確であることを願っています

ありがとう

4

2 に答える 2

3

やってみてください:

//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 を別のセクションに分割する方法です)

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

カスタム スクリプトを使用してメインの 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() 関数の後に返されます。

于 2013-09-25T14:11:32.373 に答える