javascript - 如果没有 Nodejs 中所有路由的一个长文件,我该如何进行路由?

标签 javascript node.js url-routing router

使用此链接作为引用 https://github.com/visionmedia/express/tree/master/examples/route-separation “可以做什么”

我没有使用 Express。我以它们为例。

我想做这样的事情,但“更简单”......

如何才能避免在一个文件中的一个长而复杂的列表中声明所有路由?我可以通过将路由器传递到我的模块中来定义它们,然后将所有代码包含在一个目录中吗?好吧,我会忍受一个只包含“require”的长文档,例如index.js,为此一个〜至少我的构建脚本可以为我重建一个,但最好不要在我可能添加的每一条路线的主文件中。

例如,他们使用以下代码:

// General

app.get('/', site.index);

// User

app.all('/users', user.list);
app.all('/user/:id/:op?', user.load);
app.get('/user/:id', user.view);
app.get('/user/:id/view', user.view);
app.get('/user/:id/edit', user.edit);
app.put('/user/:id/edit', user.update);

// Posts

app.get('/posts', post.list);

我想避免在我的 app.js 中创建类似的列表。我想让每个文件都知道该文件的路由。

这就是我想要做的:(请不要批评代码,我让它变得非常简单,所以我确保我以我想要的方式说明我的代码)

//app.js
var router = require('./myRouter.js')
var includes = require('./routes/*.js').register(router)

// do some stuff here with an https server and start the server here

//./routes/user.js
var myRouter;
exports.register(router){
  myRouter = router;
}
router.addRoute(/* here I do the magic associated with this route */)

我可以这么简单吗?我在这里缺少什么?

我没有编写这段代码,因为我非常确定我的处理方式是错误的。

如果我必须在 /routes/ 文件夹中使用类似 index.js 的东西,我可以使用我演示过的相同概念吗?喜欢在我的代码中使用附加的 .register(router) 以便我可以递归地传递该信息?这行得通吗?

最佳答案

我为此使用 index.js 文件,并使用 require("routes") 这是一个文件夹。

// app.js
route = require("./routes"),
...
route(app);

// routes/index.js
var index = require("./index-route"),
    about = require("./about-route"),
    posts = require("./posts-route");

module.exports = function(app) {
    index(app);
    about(app);
    posts(app);
};

这是有效的,因为如果您需要一个文件夹,它会默认加载index.js

如果您有很多路由,您可能希望根据约定加载它们

var routes = [];
// read all files
fs.readdir("./", function(files) {
    files.forEach(function(val) {
        // require all non-index.js files.
        if (val !== "index.js") {
            routes.push(require(val));
        }
    });
});

module.exports = function(app) {
    // for each route you required call it with app.
    routes.forEach(val.bind(null, app));
}

这将加载所有非“index.js”的 .js 文件,因此当您路由它们时,/routes/ 文件夹中的任何文件都会被加载并运行。

关于javascript - 如果没有 Nodejs 中所有路由的一个长文件,我该如何进行路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092920/

相关文章:

javascript - C# WEB API CORS 不起作用

node.js - 异步运行三个函数并等待三个函数完成

android - 无法将Android上的socket io与服务器nodejs连接

asp.net-mvc-4 - ASP :NET MVC4 url routing for controllers with the same name in different namespaces

asp.net-mvc - 路由 MVC 4 应用程序 url - css 和 js 不起作用

javascript - 如何从异步调用返回响应?

Javascript - 对预检请求的响应未通过访问控制检查

javascript - 基于选中/未选中复选框的文本框值

javascript - mysql查询后 promise 警告

c# - 从 ASP.NET WebForms 到 ASP.NET MVC 时维护 URL