簡體   English   中英

如何在沒有nodejs中所有路由的一個長文件的情況下進行路由?

[英]How can I do my routing without having one long file of all the routes in nodejs?

使用此鏈接作為參考“ https://github.com/visionmedia/express/tree/master/examples/route-separation可以做什么”

我不使用快遞。 我以它們為例。

我想做這樣的事情,但“更簡單” ...

如何避免在一個文件中將所有路線都聲明為一個復雜的長列表? 我可以通過將路由器傳遞到我的模塊中,然后將所有代碼包含在一個目錄中來定義它們嗎……好吧,我會遇到一個冗長的文檔,該文檔僅“需要”包含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 ,是因為如果您require一個文件夾,則默認情況下它將加載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/文件夾中的任何文件都將在/routes/時加載並運行。

您的解決方案似乎模糊不清,就像您希望使用Visitor Patern一樣 ,在這種情況下,我建議您將./roots/ require-able( 請參閱此問題 ),並在index.js包括所有想要的文件(作為本地文件)並export一個注冊模塊,該模塊在每個所需文件上調用注冊模塊。

或者,您也可以將上述答案中的代碼直接復制到您的主文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM