Узел JS — передача объекта Javascript по ссылке на другие файлы

#javascript #node.js

#javascript #node.js

Вопрос:

Я определил http-сервер, потребовав следующего:

 var http = require('http');

function onRequest(request, response) {
    console.log("Request"   request);
    console.log("Reponse"   response);
}

http.createServer(onRequest).listen(8080);
 

Я хотел бы передать http-объект в класс JS (в отдельном файле), где я загружаю внешние модули, специфичные для моего приложения.

Любые предложения о том, как мне это сделать?

Спасибо, Марк

Ответ №1:

Вам не нужно передавать http-объект, потому что он может потребоваться снова в других модулях. Node.js вернет тот же объект из кэша.

Если вам нужно передать экземпляр объекта в модуль, одним из несколько опасных вариантов является определение его как глобального (без ключевого слова var). Это будет видно в других модулях.

Более безопасной альтернативой является определение модуля следующим образом

 // somelib.js
module.exports = function( arg ) { 
   return {
      myfunc: function() { console.log(arg); }
   }
};
 

И импортируйте его следующим образом

 var arg = 'Hello'
var somelib = require('./somelib')( arg );
somelib.myfunc() // outputs 'Hello'.
 

Ответ №2:

Да, посмотрите, как создавать модули: http://nodejs.org/docs/v0.4.12/api/modules.html

У каждого модуля есть специальный вызываемый объект exports , который будет экспортирован, когда другие модули его включают.

Например, предположим, что вызывается ваш пример кода app.js , вы добавляете строку exports.http = http и в другой файл javascript в той же папке, включаете его с var app = require("./app.js") помощью, и вы можете получить доступ к http с app.http помощью .