如何在Express中设置路线? app.use()vs app.get()

时间:2017-06-14 12:35:55

标签: node.js express routing

我有站点存根,其中路由设置在2个位置。

首先在app.js

...
var index = require('./routes/index');
var users = require('./routes/users');
...
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);
...

使用use设置了一些内容。接下来是内部引用的脚本,例如index.js

var express = require('express');
var router = express.Router();

var fs = require('fs');
var path = require('path');
var config = require('../config');

/* GET home page. */
router.get('/', function(req, res) {

    var data = {};
    ...

假设我希望使用来自Express Routing doc的信息。我应该在哪里放置路由,比如/users/:userId/books/:bookId

在文档中,get针对的是app,而在我的存根中,get会针对router进行调用,并且会以两步方式进行调用。

在哪里挂钩?

2 个答案:

答案 0 :(得分:2)

在文档中get针对app进行调用,因为它们在app.js文件中设置了端点。在index.js中,您使用module.exports = router;(应用程序的路由器)从文件返回路由器。现在在app.js文件中说

app.use('/', index);
app.use('/users', users);

这些是路线。您是说index文件中的所有端点都以/开头,而users文件中的端点都以/users开头。

因此路由/users/:userId/books/:bookId必须在users.js文件中,如此

router.get('/:userId/books/:bookId', function(req, res, next) {
   // do something
});

答案 1 :(得分:1)

如果要处理此路由 - /users/:userId/books/:bookId,则需要在routes/users.js文件中编写以下处理程序。

router.get('/:userId/books/:bookId', function(req, res) {
    var data = {};
});//get route

基本上,在app.js中,您根据其第一部分对网址进行分类,例如: users。因此,以/users开头的所有路由都将由您的routes/users.js类处理。所有其他路由将由routes/index.js处理,因为它被定义为处理/(没有/ users,/ admin等,因此users.js未处理的所有路由都可以在这处理。)

此外,在这些路径处理程序文件中,您定义了一个router对象,向其添加所有路径处理程序并将其导出到底部。因此,当您使用这些文件时,需要使用router,而app.js可以直接使用app.get()等。