gpt4 book ai didi

javascript - 定义自定义路由的 NodeJS Express

转载 作者:搜寻专家 更新时间:2023-11-01 00:12:34 26 4
gpt4 key购买 nike

这可能是一个我不理解的非常基本的概念,但在我的 NodeJS 应用程序中,我正在尝试定义自定义路由。

我的目录结构如下

/application
/app.js
/package.json
/node_modules
/public
/routes
/control
/users.js
/views
/control
/users.ejs

我对此很满意,因为我想将路线和 View 保持一对一的关系,因为我最终会得到类似的结果

/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);

最佳答案

您可以使用 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);

/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中定义的路由,你需要发送一个GET请求到/test,而在user.js中,你需要发送一个GET请求到/control/test 以获得响应。

这样,您需要在主 js 文件(在您的例子中为 app.js)中包含主路由文件,即路由目录下的 index.js。无论哪种方式,您仍然需要为每个导出路由器对象的文件执行一个 require 语句。

关于javascript - 定义自定义路由的 NodeJS Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41701071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com