【问题标题】:How to read all routes dynamically in node.js如何在 node.js 中动态读取所有路由
【发布时间】:2022-01-24 21:07:15
【问题描述】:

我正在尝试从“./routes”文件夹中读取我的 app.js 文件中的所有路由,但是 出现错误:“TypeError:无法读取未定义的属性'forEach'”

           import express from "express";
           import fs from "fs";
           const app = express();
           fs.readdir('./routes', (err, fs) => {
           fs.forEach(file => {
           app.use('/', require('./routes/' + file))
                             });
                   })
          export default app

【问题讨论】:

  • 您想获取所有附加到 express 实例的路由吗?或者你想动态添加你的路线?

标签: node.js routes


【解决方案1】:

您可以使用fs.readdirSync,因为服务器尚未启动。

fs.readdir(`${__dirname}/routes`, (err, files) => {
  if (err)
    console.log(err);
  else {
    files.forEach(file => {
      app.use('/', require(`${__dirname}/routes` + file));
    })
  }
})

你可以使用 fspromise 和 import 来处理使用 promise。 ???

import { promises as fsPromises } from 'fs';
export const init = async () => {
  const files = await fsPromises.readdir(`${__dirname}/routes`);
  const router = Router();
  const createRoute = async (file) => {
    const route = await import(`./routes/${file}`);
    router.use("/", route.default);
  };
  await Promise.all(files.map(createRoute));
  return router;
}

// app.js
import {init} from "./routes";
const app = express();

(async() => {
 await init();
//  Start server
})();

我建议像下面那样做。您将对路线有更多的控制权。如果需要,您可以根据路由进行自定义。

例如。 /v1 和 /v2 等。

// routes/index.js
import { Router } from "express";
import route1 from './route1';
import route2 from './route2';

const router = Router();
[route1, route2].forEach((route) => router.use("/", route));
export default router;


// app.js
import express from "express";
import routes from "./routes";

const app = express();
app.use("/", routes);

export default app;

【讨论】:

  • 嗨 Rahul,您能否分享一些 sn-ps 如何使用 import 而不是“require”来做同样的事情,因为我在 package.json 中添加了 type:"module"
  • @RohitRai 我已经更新了我的答案,您使用的这种方法未经测试,但它应该可以工作
【解决方案2】:

这对我有用:

同步

fs.readdirSync('/some/path/routes').forEach(function(file) {
  app.use('/', require(`/some/path/routes/` + file));
});

异步

fs.readdir('/some/path/routes', function(err, files){
  files.forEach(function(file){
    app.use('/', require(`/some/path/routes/` + file));
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2021-10-14
    • 2019-02-25
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多