Estoy escribiendo un servidor simple para Node.js y estoy usando mi propia clase llamada User
que se ve así:
function User(socket) {
this.socket = socket;
this.nickname = null;
/* ... just the typical source code like functions, variables and bugs ... */
this.write = function(object) {
this.socket.write(JSON.stringify(object));
}
};
y luego, más adelante en el proceso, lo estoy instanciando mucho:
var server = net.createServer(function (socket) {
/* other bugs */
var user = new User(socket);
/* more bugs and bad practise */
});
¿Puedo mover mi User
definición de clase a otro archivo javascript e "incluirla" de alguna manera?
fuente
User
es la función js habitual.module.exports = new User();
Esto creará una nueva instancia de Usuario cada vez que se requiera el módulo. A continuación, puede requerir el módulo para cada variable de la siguiente manera:let user = require('./user.js');
.Con ES6, puede tener
user.js
:Y luego úsalo en
server.js
fuente
SyntaxError: Unexpected token export
cuando hago lo que describiste ... tengo la versión de nodov10.16.3
Modifica la definición de tu clase para que se lea así:
Luego cambie el nombre del archivo a
user.js
. Suponiendo que está en el directorio raíz de su script principal, puede incluirlo así:Esa es la versión rápida y sucia. Lea acerca de los módulos CommonJS si desea obtener más información.
fuente
Otra forma además de las proporcionadas aquí para ES6
e incluir lo mismo que
fuente
Si agrega esto a
user.js
:entonces
server.js
puedes hacer:http://nodejs.org/docs/v0.4.10/api/globals.html#require
Otra forma es:
entonces esto sería suficiente en
server.js
:fuente
Solo quiero señalar que la mayoría de las respuestas aquí no funcionan, soy nuevo en NodeJS e IDK si a lo largo del tiempo el método "module.exports.yourClass" cambió, o si la gente simplemente ingresó la respuesta incorrecta.
fuente
En lugar de myFile.js, escriba sus archivos como myFile.mjs. Esta extensión viene con todas las ventajas de es6, pero me refiero a que te recomiendo webpack y Babel
fuente