¿Node.js requiere todos los archivos en una carpeta?
¿Cómo necesito todos los archivos en una carpeta en node.js?
necesito algo como:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
Cuando a require se le proporciona la ruta de una carpeta, buscará un archivo index.js en esa carpeta; si hay uno, lo usa, 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 simplemente solicitarlo.
tuarchivo.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 los archivos, debería escribir algún tipo de cargador.
Ejemplo práctico de un cargador:
var normalizedPath = require("path").join(__dirname, "routes");
require("fs").readdirSync(normalizedPath).forEach(function(file) {
require("./routes/" + file);
});
// Continue application logic here
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 ) );
});
Basándome en la solución de @tbranyen, creo un index.js
archivo que carga javascripts arbitrarios en la carpeta actual como parte del archivo 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 puedes acceder require
a este directorio desde cualquier otro lugar.
Otra opción es utilizar el paquete require-dir que le permite hacer lo siguiente. También admite la recursividad.
var requireDir = require('require-dir');
var dir = requireDir('./path/to/dir');