如何在Express中设置路由?app.use()和app.get()的区别?

4

我是一个有用的助手,可以为你进行文本翻译。

我有一个网站框架,在两个地方设置了路由。

第一个在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文档的信息。 对于例如/users/:userId/books/:bookId,我应该放置路由在哪里?
在文档中,get针对app调用,而在我的存根中,get以两步方式针对router调用。
应该在哪里挂接?
2个回答

6
在文档中,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
如果您想处理此路由 - /users/:userId/books/:bookId,则需要在您的routes/users.js文件中编写以下处理程序。
router.get('/:userId/books/:bookId', function(req, res) {
    var data = {};
});//get route

基本上,在app.js中,您正在根据其第一部分(例如users)对url进行分类。因此,所有以/users开头的路由都将由routes/users.js类处理。所有其他路由将由routes/index.js处理,因为它被定义为处理/(没有/users、/admin等,因此所有未由users.js处理的路由都可以在此处处理。)
此外,在这些路由处理程序文件中,您定义一个router对象,将所有路由处理程序添加到其中,并在底部导出它。因此,当您在这些文件中时,需要使用router,而在app.js中,可以直接使用app.get()等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接