这可能是一个我不理解的基本概念,但在我的NodeJS应用程序中,我试图定义一个自定义路由.
我的目录结构如下
/application /app.js /package.json /node_modules /public /routes /control /users.js /views /control /users.ejs
我很满意,因为我希望将路线和观点保持在1比1的关系中,因为我最终会得到像这样的东西
/application /app.js /package.json /node_modules /public /routes /control /users.js /system.js /tools /stock.js /report.js /views /control /users.ejs /system.ejs /tools /stock.ejs /report.ejs
所以我不希望最终得到一个带有大量路由代码的/routes/index.js文件.
它似乎工作,而我的app.js文件如下
//============================================================================== // setup //============================================================================== var express = require("express"); var path = require("path"); var app = express(); var port = 3000; var message = null; app.set("view engine", "ejs"); app.use(express.static(path.join(__dirname, "public"))); //============================================================================== // routes //============================================================================== var users = require("./routes/control/users"); app.get("/", users.users); //============================================================================== // start server //============================================================================== app.listen(port, function() { message = "Server Started : Port " + port; console.log(message); });
虽然我可以看到这最终会看起来像
//============================================================================== // setup //============================================================================== var express = require("express"); var path = require("path"); var app = express(); var port = 3000; var message = null; app.set("view engine", "ejs"); app.use(express.static(path.join(__dirname, "public"))); //============================================================================== // routes //============================================================================== // control var users = require("./routes/control/users"); app.get("/", users.users); var system = require("./routes/control/system"); app.get("/", system.system); // tools var stock = require("./routes/tools/stock"); app.get("/", stock.stock); var report = require("./routes/tools/report"); app.get("/", report.report); //============================================================================== // start server //============================================================================== app.listen(port, function() { message = "Server Started : Port " + port; console.log(message); });
所以我真的不想要那么多要求,但是这样做就好像以下似乎没有用,我不知道为什么
// control var control = require("./routes/control"); app.get("/", control.users.users); app.get("/", control.system.system); // tools var tools = require("./routes/tools"); app.get("/", tools.stock.stock); app.get("/", tools.report.report);
Brian.. 6
您可以使用快速路由器对象来链接您的路由.这是一个例子
/app.js
var routes = require('./routes/index'); // as noted by Paul in the comments, // you could use `app.use(routes)` for simplicity app.use('/', routes);
/routes/index.js
var routes = require('express').Router(); routes.route('/test') .get(function (req, res) { res.send(req.originalUrl); }); routes.use('/control', require('./control/user')); module.exports = routes;
/routes/control/user.js
var routes = require('express').Router(); routes.route('/test') .get(function (req, res) { res.send(req.originalUrl); }); module.exports = routes;
因此,对于index.js中定义的路由,您需要向/test
user.js 发送GET请求,您需要发送GET请求/control/test
以获取响应.
这样你需要包含在主js文件中的所有内容,就是你的情况下的app.js,是主路由文件,它是routes目录下的index.js.无论哪种方式,您仍然需要为导出路由器对象的每个文件执行一个require语句.
您可以使用快速路由器对象来链接您的路由.这是一个例子
/app.js
var routes = require('./routes/index'); // as noted by Paul in the comments, // you could use `app.use(routes)` for simplicity app.use('/', routes);
/routes/index.js
var routes = require('express').Router(); routes.route('/test') .get(function (req, res) { res.send(req.originalUrl); }); routes.use('/control', require('./control/user')); module.exports = routes;
/routes/control/user.js
var routes = require('express').Router(); routes.route('/test') .get(function (req, res) { res.send(req.originalUrl); }); module.exports = routes;
因此,对于index.js中定义的路由,您需要向/test
user.js 发送GET请求,您需要发送GET请求/control/test
以获取响应.
这样你需要包含在主js文件中的所有内容,就是你的情况下的app.js,是主路由文件,它是routes目录下的index.js.无论哪种方式,您仍然需要为导出路由器对象的每个文件执行一个require语句.