这可能是一个我不理解的基本概念,但在我的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);
答案 0 :(得分: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
发送GET请求,而在user.js中,您需要向/control/test
发送GET请求得到回应。
这样你需要包含在主js文件中的所有内容,就是你的情况下的app.js,是主路由文件,它是routes目录下的index.js。无论哪种方式,您仍然需要为导出路由器对象的每个文件执行一个require语句。
答案 1 :(得分:2)
当你说:
var control = require("./routes/control");
Node将执行以下操作:
默认情况下,当您提供 require 的文件夹路径时,它不会自动加载该文件夹中的 .js 文件,它会查找 package.json 文件,如果不存在,则加载 index.js 。一世。即它寻找一个切入点。
在控制文件夹中创建 index.js :
/routes
/control
/users.js
/system.js
/index.js
index.js:
module.exports = {
users: require('./users');
system: require('./system');
};
也可以为您的工具目录执行此操作,并且您的上一个方法应该有效。
注意您可以考虑使用express.Router管理路线。