ExpressJS - 路由

Web 框架在不同的路由上提供 HTML 页面、脚本、图像等资源。

以下函数用于在 Express 应用程序中定义路由 −

app.method(path, handler)

此方法可应用于任何 HTTP 动词 - get、set、put、delete。还存在一种替代方法,其执行与请求类型无关。

Path 是请求将运行的路由。

Handler 是一个回调函数,当在相关路由上找到匹配的请求类型时执行。例如,

var express = require('express');
var app = express();

app.get('/hello', function(req, res){
   res.send("Hello World!");
});

app.listen(3000);

如果我们运行应用程序并转到 localhost:3000/hello,服务器在路由 "/hello" 处收到 get 请求,我们的 Express 应用程序将执行附加到此路由的 callback 函数并发送 "Hello World!" 作为响应。

Hello

我们还可以在同一路由上使用多种不同的方法。例如,

var express = require('express');
var app = express();

app.get('/hello', function(req, res){
   res.send("Hello World!");
});

app.post('/hello', function(req, res){
   res.send("You just called the post method at '/hello'!
");
});

app.listen(3000);

要测试此请求,请打开您的终端并使用 cURL 执行以下请求 −

curl -X POST "http://localhost:3000/hello"
Curl request

Express 提供了一种特殊方法 all,可使用相同函数处理特定路由上的所有类型的 http 方法。要使用此方法,请尝试以下操作。

app.all('/test', function(req, res){
   res.send("HTTP method doesn't have any effect on this route!");
});

此方法通常用于定义中间件,我们将在中间件章节中讨论。

路由器

像上面这样定义路由非常繁琐。为了将路由与我们的主要 index.js 文件分开,我们将使用 Express.Router。创建一个名为 things.js 的新文件并在其中输入以下内容。

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

router.get('/', function(req, res){
   res.send('GET route on things.');
});
router.post('/', function(req, res){
   res.send('POST route on things.');
});

//导出此路由器以在我们的 index.js 中使用
module.exports = router;

现在要在我们的 index.js 中使用此路由器,请在 app.listen 函数调用之前输入以下内容。

var express = require('Express');
var app = express();

var things = require('./things.js');

//index.js 和 things.js 都应该在同一目录中
app.use('/things', things);

app.listen(3000);

在路由 '/things' 上的 app.use 函数调用将 things 路由器与此路由连接起来。现在,我们的应用在 '/things' 收到的任何请求都将由我们的 things.js 路由器处理。 things.js 中的 '/' 路由实际上是 '/things' 的子路由。访问 localhost:3000/things/,您将看到以下输出。

Router Things

路由器在分离关注点和将代码的相关部分放在一起方面非常有用。它们有助于构建可维护的代码。您应该在单个文件中定义与实体相关的路由,并使用上述方法将其包含在 index.js 文件中。