tutorial sintaxis servidor nodejs node lado español desde descubriendo cero javascript node.js folder require

javascript - sintaxis - node js tutorial



¿node.js requiere todos los archivos en una carpeta? (11)

¿Cómo requiero todos los archivos en una carpeta en node.js?

necesita algo como

files.forEach(function (v,k){ // require routes require(''./routes/''+v); }};


Cuando se le asigna la ruta de acceso a una carpeta, buscará un archivo index.js en esa carpeta; si hay uno, usa eso, y si no lo hay, falla.

Probablemente tendría más sentido (si tiene control sobre la carpeta) crear un archivo index.js y luego asignar todos los "módulos" y luego requerirlo.

yourfile.js

var routes = require("./routes");

index.js

exports.something = require("./routes/something.js"); exports.others = require("./routes/others.js");

Si no conoce los nombres de archivo, debe escribir algún tipo de cargador.

Ejemplo de trabajo de un cargador:

var normalizedPath = require("path").join(__dirname, "routes"); require("fs").readdirSync(normalizedPath).forEach(function(file) { require("./routes/" + file); }); // Continue application logic here


Estoy usando módulos de nodo módulo de copia para crear un solo archivo que requiera todos los archivos en nuestro sistema basado en NodeJS.

El código para nuestro archivo de utilidad se ve así:

/** * Module dependencies. */ var copy = require(''copy-to''); copy(require(''./module1'')) .and(require(''./module2'')) .and(require(''./module3'')) .to(module.exports);

En todos los archivos, la mayoría de las funciones se escriben como exportaciones, así:

exports.function1 = function () { // function contents }; exports.function2 = function () { // function contents }; exports.function3 = function () { // function contents };

Entonces, para usar cualquier función de un archivo, simplemente llame:

var utility = require(''./utility''); var response = utility.function2(); // or whatever the name of the function is


Otra opción es usar el paquete require-dir que le permite hacer lo siguiente. Es compatible con la recursión también.

var requireDir = require(''require-dir''); var dir = requireDir(''./path/to/dir'');



Recomiendo usar glob para realizar esa tarea.

var glob = require( ''glob'' ) , path = require( ''path'' ); glob.sync( ''./routes/**/*.js'' ).forEach( function( file ) { require( path.resolve( file ) ); });


Sé que esta pregunta tiene más de 5 años, y las respuestas dadas son buenas, pero quería algo un poco más potente para Express, así que creé el paquete express-map2 para npm. Iba a llamarlo simplemente express-map , sin embargo, la gente de yahoo ya tiene un paquete con ese nombre, así que tuve que cambiar el nombre de mi paquete.

1. uso básico:

app.js (or whatever you call it) var app = require(''express''); // 1. include express app.set(''controllers'',__dirname+''/controllers/'');// 2. set path to your controllers. require(''express-map2'')(app); // 3. patch map() into express app.map({ ''GET /'':''test'', ''GET /foo'':''middleware.foo,test'', ''GET /bar'':''middleware.bar,test''// seperate your handlers with a comma. });

uso del controlador:

//single function module.exports = function(req,res){ }; //export an object with multiple functions. module.exports = { foo: function(req,res){ }, bar: function(req,res){ } };

2. Uso avanzado, con prefijos:

app.map(''/api/v1/books'',{ ''GET /'': ''books.list'', // GET /api/v1/books ''GET /:id'': ''books.loadOne'', // GET /api/v1/books/5 ''DELETE /:id'': ''books.delete'', // DELETE /api/v1/books/5 ''PUT /:id'': ''books.update'', // PUT /api/v1/books/5 ''POST /'': ''books.create'' // POST /api/v1/books });

Como puede ver, esto ahorra una tonelada de tiempo y hace que el enrutamiento de su aplicación sea sencillo de escribir, mantener y entender. admite todos los verbos http que expresan soportes, así como el método especial .all() .


Si incluye todos los archivos de * .js en el ejemplo de directorio ("app / lib / *. Js"):

En el directorio de aplicaciones / lib

example.js:

module.exports = function (example) { }

ejemplo-2.js:

module.exports = function (example2) { }

En el directorio de aplicaciones crear index.js

index.js:

module.exports = require(''./app/lib'');


Sobre la base de la solución de @ tbranyen, creo un archivo index.js que carga javascripts arbitrarios en la carpeta actual como parte de las exports .

// Load `*.js` under current directory as properties // i.e., `User.js` will become `exports[''User'']` or `exports.User` require(''fs'').readdirSync(__dirname + ''/'').forEach(function(file) { if (file.match(//.js$/) !== null && file !== ''index.js'') { var name = file.replace(''.js'', ''''); exports[name] = require(''./'' + file); } });

Entonces puede require este directorio desde cualquier otro lugar.


Tengo una carpeta / campos llenos de archivos con una sola clase cada uno, por ejemplo:

fields/Text.js -> Test class fields/Checkbox.js -> Checkbox class

Suelte esto en fields / index.js para exportar cada clase:

var collectExports, fs, path, __hasProp = {}.hasOwnProperty; fs = require(''fs''); path = require(''path''); collectExports = function(file) { var func, include, _results; if (path.extname(file) === ''.js'' && file !== ''index.js'') { include = require(''./'' + file); _results = []; for (func in include) { if (!__hasProp.call(include, func)) continue; _results.push(exports[func] = include[func]); } return _results; } }; fs.readdirSync(''./fields/'').forEach(collectExports);

Esto hace que los módulos actúen más como lo harían en Python:

var text = new Fields.Text() var checkbox = new Fields.Checkbox()


Un módulo que he estado usando para este caso de uso exacto es el require-all .

Requiere recursivamente todos los archivos en un directorio dado y sus subdirectorios siempre que no coincidan con la propiedad excludeDirs .

También permite especificar un filtro de archivo y cómo obtener las claves del hash devuelto a partir de los nombres de archivo.


Una opción más es require-dir-all combina las características de los paquetes más populares.

La función require-dir más popular no tiene opciones para filtrar los archivos / dirs y no tiene una función de map (ver a continuación), pero utiliza un pequeño truco para encontrar la ruta actual del módulo.

En segundo lugar, el require-all popularidad tiene require-all filtros y preprocesamiento de __dirname , pero carece de una ruta relativa, por lo que debe usar __dirname (esto tiene pros y contras) como:

var libs = require(''require-all'')(__dirname + ''/lib'');

El require-index mencionado aquí es bastante minimalista.

Con map puede hacer un preprocesamiento, como crear objetos y pasar valores de configuración (asumiendo que los módulos se encuentran debajo de los constructores de exportaciones):

// Store config for each module in config object properties // with property names corresponding to module names var config = { module1: { value: ''config1'' }, module2: { value: ''config2'' } }; // Require all files in modules subdirectory var modules = require(''require-dir-all'')( ''modules'', // Directory to require { // Options // function to be post-processed over exported object for each require''d module map: function(reqModule) { // create new object with corresponding config passed to constructor reqModule.exports = new reqModule.exports( config[reqModule.name] ); } } ); // Now `modules` object holds not exported constructors, // but objects constructed using values provided in `config`.