干净的方式来要求"在nodejs中必须传递params

时间:2015-09-25 19:34:45

标签: javascript node.js

我有一些名为socket.js和Chat.js的文件。

让我们说Chat.js包含:

Nz_èJÓ_µù[î¬y

和socket.js

function Chat(io, socket) {
  this.sendChatMessage(data) {};
}
module.exports = Chat;

经过多次尝试,以上是最简洁的要求" Chat"我发现了,但对于经常使用的东西看起来仍然很奇怪。

我尝试了类似的东西(我想仍然干净)

module.exports = function (io) {
    io.on('connection', function(socket) {
      var Chat = new (require('./Chat'))(io, socket),
    });
}

还尝试添加" new"在module.exports = new Chat;直接等等。

这有什么标准吗?如果没有,你用什么?

2 个答案:

答案 0 :(得分:3)

是的,你就是这样做的:导出你需要的任何功能,并在需要模块后调用它们。

  

还尝试在module.exports = new Chat

中添加“new”

除非您确实要导出实例而不是构造函数,否则不要这样做。

使用这样的模式很常见,所以你可以省略调用构造函数的new

function Chat(io, socket) {
  if (! (this instanceof Chat)) return new Chat(io, socket);
  this.sendChatMessage(data) {};
}
var Chat = require('./Chat')(io, socket)

答案 1 :(得分:0)

我不确定现在最受欢迎的是什么,但这是我如何用babel和ES6标准做到的:

// chat.js                                                

export default class Chat {                               
  constructor(io, socket) {                               
    this.io = io;                                         
    this.socket = socket;
    this.sendMessage(data);                                
  }                                                       

  sendMessage(data) {                                     
    //                                                    
  }                                                       
}                                                         

// iochat.js                                              

import Chat from './chat';                                

export default function connectChat (io) {                
  io.on('connection', (socket) => {                       
    let chat = new Chat(io, socket);                      
  });                                                     
}                                                         


// tio.js                                                 

import connectChat from './iochat';                       

let io = { on:()=>{}};                                    
connectChat(io);

虽然我猜测connectChat是一个更大的模块或应用程序的一部分。