Javascript 定义自定义路由的NodeJS Express
这可能是我不理解的一个非常基本的概念,但在我的NodeJS应用程序中,我试图定义一个自定义路由 我的目录结构如下Javascript 定义自定义路由的NodeJS Express,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,这可能是我不理解的一个非常基本的概念,但在我的NodeJS应用程序中,我试图定义一个自定义路由 我的目录结构如下 /application /app.js /package.json /node_modules /public /routes /control /users.js /views /control /users.ejs //===============
/application
/app.js
/package.json
/node_modules
/public
/routes
/control
/users.js
/views
/control
/users.ejs
//==============================================================================
// 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);
});
我很高兴,因为我想让路线和视图保持一对一的关系,因为我最终会得到类似的东西
/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文件如下时,它似乎可以工作
/application
/app.js
/package.json
/node_modules
/public
/routes
/control
/users.js
/views
/control
/users.ejs
//==============================================================================
// 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);
您可以使用express Router对象链接您的路由。这里有一个例子 /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);
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;
var routes = require('express').Router();
routes.route('/test')
.get(function (req, res) {
res.send(req.originalUrl);
});
module.exports = routes;
/routes/index.js
var routes = require('./routes/index');
// as noted by Paul in the comments,
// you could use `app.use(routes)` for simplicity
app.use('/', routes);
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;
var routes = require('express').Router();
routes.route('/test')
.get(function (req, res) {
res.send(req.originalUrl);
});
module.exports = routes;
/routes/control/user.js
var routes = require('./routes/index');
// as noted by Paul in the comments,
// you could use `app.use(routes)` for simplicity
app.use('/', routes);
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;
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文件,它位于routes目录下的index.js。无论哪种方式,您仍然需要为导出路由器对象的每个文件执行一条require语句。当您说:
var control = require("./routes/control");
节点将执行以下操作:
/routes
/control
/users.js
/system.js
/index.js
index.js:
module.exports = {
users: require('./users');
system: require('./system');
};
对你的工具目录也要这样做,你的最后一种方法应该会奏效
<强>注释< /强>您可以考虑使用管理路由。
好例子,但是应该注意,您可以简化您的第一个代码> App.Author()/<代码>语句:<代码> App.使用(路由);<代码>,因为根路径是默认路径。@Paul是的,没错。复制粘贴习惯:)这看起来是一个非常好的答案,@dNitro的答案对我来说只是简单一点understand@Trent我想说的是,对开发者来说最好的东西。如果你以后需要重构你的代码,你可以以此为基础。非常感谢这个答案解决了我的问题,代码看起来非常简单,易于使用