在这一点上,我非常清楚Express 4路由器是如何工作的,但我对app.js文件中声明的主路由器实例(就像下面这样)如何与快速服务器中的其他路由器交互感到困惑。
因此,您可以从app.js文件中的以下内容开始:
var express = require('express');
var router = express.Router();
var app = express();
在您的Express 4 app.js文件中,您将执行以下操作:
app.use(router); //what is this doing? maybe nothing
然后您可能会这样做(在同一个文件app.js中):
var loginRoute = require('../routes/login');
var logoutRoute = require('../routes/logout');
app.use('/login',loginRoute);
app.use('/logout',logoutRoute);
在loginRoute里面我们有
var express = require('express');
var router = express.Router();
router.get('/',function(req,res,next){
}
router.post('/',function(req,res,next){
}
在logoutRoute中,我们可能有与loginRoute大致相同的骨架:
var express = require('express');
var router = express.Router();
router.get('/',function(req,res,next){
}
router.post('/',function(req,res,next){
}
我正在热身为这个新的路由器为快速4,但我仍然是在黑暗中的工作方式。所以我的问题是,app.js中的快速路由器是如何与其他路由器交互的?那么app.use(require('express').Router())
到底应该做什么呢?我的猜测是,呼叫app.use(router);
告诉快递4你的意图-你的意图使用路由器,而不是单一的基本路由器的应用。但是给出了代码,我看不出app.use(router)
与app.use('/login'..)
和app.use('/logout'..).
所使用的路由器是如何交互或有任何关系的
快递4路由器能互相委托吗?你能举个例子吗?
我希望你能理解我的困惑。
发布于 2015-06-29 20:44:07
在Express 4+中,一种将路由器视为微型服务的方式可以安装在应用程序本身或其他路由器上。
例如,当安装到应用程序本身时:
var routerA = express.Router();
var routerB = express.Router();
routerA
.post('/bar', function (req, res, next) {...})
.get('/bar', function (req, res, next) {...});
routerB
.post('/bar', function (req, res, next) {...})
.get('/bar', function (req, res, next) {...});
// Mount routerA at `/foo`
// handles both get and post requests to /foo/bar but not /bar/bar
app.use('/foo', routerA);
// Mount routerB at `/bar`
// handles both get and post requests to /bar/bar but not /foo/bar
app.use('/bar', routerB);
如果您想将一个路由器挂载到另一个路由器上:
var routerA = express.Router();
var routerB = express.Router();
routerA
.post('/bar', function (req, res, next) {...})
.get('/bar', function (req, res, next) {...});
routerB
.post('/bar', function (req, res, next) {...})
.get('/bar', function (req, res, next) {...});
// Mount routerB to routerA at `/foo`
// handles both get and post requests to /foo/bar at routerA's mount point
routerA.use('/foo', routerB);
// Mount routerA at `/foobar`
// handles both get and post requests to /foobar/bar with routerA
// and /foobar/foo/bar with routerB
app.use('/foobar', routerA);
以这种方式使用路由器可以使您的代码更加模块化,同时也允许像this这样的东西。
关于没有分配给路由器的任何东西的app.use(router)
的使用:它是无用的。您可以在不影响应用程序的情况下删除它。后面安装的路由器是那些实际执行路由的路由器。
https://stackoverflow.com/questions/31129424
复制