当前位置:  开发笔记 > 编程语言 > 正文

NodeJS Express定义自定义路由

如何解决《NodeJSExpress定义自定义路由》经验,为你挑选了1个好方法。

这可能是一个我不理解的基本概念,但在我的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中定义的路由,您需要向/testuser.js 发送GET请求,您需要发送GET请求/control/test以获取响应.

这样你需要包含在主js文件中的所有内容,就是你的情况下的app.js,是主路由文件,它是routes目录下的index.js.无论哪种方式,您仍然需要为导出路由器对象的每个文件执行一个require语句.



1> Brian..:

您可以使用快速路由器对象来链接您的路由.这是一个例子

/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中定义的路由,您需要向/testuser.js 发送GET请求,您需要发送GET请求/control/test以获取响应.

这样你需要包含在主js文件中的所有内容,就是你的情况下的app.js,是主路由文件,它是routes目录下的index.js.无论哪种方式,您仍然需要为导出路由器对象的每个文件执行一个require语句.


很好的例子,虽然应该注意你可以简化你的第一个`app.use()`语句:`app.use(routes);`,因为根路径是默认的.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有