вызов метода из внешнего файла javascript

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

У меня есть 2 файла JavaScript. Я попытался вызвать метод из одного файла в другой файл, но я получаю сообщение об ошибке, что мой метод не существует («TypeError: Object # не имеет метода ‘getServer'»).

Существует метод из первого файла:

 function getServer(app, server)
{
  var socket = require("socket.io");
  app.get("/", function(request, response) {
    if(request.accepts("text/html"))
    {
      app.use(express.static(__dirname   '/'));
      response.sendfile(__dirname   "/index.html");
    }
  });

  var io = socket.listen(server);
  io.sockets.on('connection', function(client) {
  ............................................
  ............................................
  });
 

существует вызов метода из второго файла:

 var msgServer = require('./firstFile.js');
msgServer.getServer(app, server);
 

В первом файле я подключаюсь к серверу и прослушиваю порт.
Я хочу отправить этот сервер во второй файл.
Мне нужны сервер и приложение во втором файле, чтобы использовать socket.io .

спасибо за ответ (:

Комментарии:

1. Заключает ли первый файл getServer в другую переменную и / или функцию или он находится в глобальном пространстве имен?

2. вы устанавливаете module.exports.getServer = getServer или создаете новый объект для module.exports того, который содержит getServer

3. Он находится в глобальном пространстве имен.

4. Я вообще не использовал module.exports

5. Добавить: module.exports.getServer = getServer;

Ответ №1:

Вы должны использовать exports var:

 exports.getServer = function(app, server)
{
  var socket = require("socket.io");
  app.get("/", function(request, response) {
  ............................................
  ............................................
  });
 

Это позволяет вам установить эту функцию доступной для каждого файла.

Другой способ сделать это:

 module.exports = {
   getServer: funnction(app, server){...}
 }
 

Комментарии:

1. См.: Модули: Объект module для получения дополнительной информации.

2. Кроме того, я бы почти всегда рекомендовал module.exports синтаксис. Simple exports — это просто ссылка (псевдоним), которая может быть случайно перезаписана и привести к неясным ситуациям и проблемам. Я думаю, это лучшая практика.