en mis clases js tengo rutas para que express las use en la propiedad de route
mi problema es que express comienza a escuchar antes de que las rutas terminen de cargarse a través de glob :
glob("pages/**/*.js", (error, file) => { import("./" + file).then((page) => { console.log(new page.default().route); }); }); app.listen(config.port, () => console.log(`App listening on http://localhost:${config.port}`) );Aquí está la salida de mi consola:
node index.js App listening on http://localhost:1337 { uri: '/users' } observe cómo la línea uri viene DESPUÉS app listening cuando debería ser antes
También probé usando glob.sync y pasa lo mismo
¿Cómo hago que el código espere a que los archivos de ruta terminen de cargarse antes de que app.listen dispare?
Puedes resolver esto con glob.sync .
const pages = glob("pages/**/*.js") for (pageName of pages) { const page = await import("./" + pageName) console.log(new page.default().route) } app.listen(config.port, () => console.log(`App listening on http://localhost:${config.port}`) )Debido a que import() es asíncrono, devuelve una Promesa, que está esperando usando .then(...), que no está bloqueando. Al usar await, el código espera a que se importe el módulo.
Deberá hacer esto en un entorno que admita espera de nivel superior o dentro de una función asíncrona. Ejemplo:
async function startApp() { // const pages = ... } startApp()Lea más sobre las promesas aquí: https://www.w3schools.com/js/js_promise.asp