app.use在我的代码中指向哪里?
我是一个初学者,我真的不明白它指向何处以及这个特定代码行的含义是什么
app.use('/ api / v1',router);
特别是/ api / v1我正在我的Windows机器上运行它。
`'use strict';
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const logger = require('morgan');
const router = express.Router();
const port = process.env.PORT || 8080;
app.use(bodyParser.json());
app.use(logger('dev'));
require('./routes')(router);
app.use('/api/v1', router);
app.listen(port);
console.log(`App Runs on ${port}`);`
回答如下:
代码行:
app.use('/api/v1', router);
意味着您正在安装路由器,该路由器仅针对路径以/api/v1
开头的URL进行查询,并且路由器中的任何路由将相对于该起始点。
所以,如果您的路由器看起来像这样:
const router = require('express').Router();
router.get('/', ...);
router.get('/list', ...);
module.exports = router;
这是你用app.use('/api/v1', router);
添加的路由器,那么你将有一个URL的路由器:
/api/v1
/api/v1/list
这些路径都是服务器所在主机的补充。因此,从外部发起请求的完整URL将包括主机(IP地址或DNS名称),例如:
http://example/api/v1
http://192.168.1.29/api/v1/list
定义路由时不需要主机,因为主机名已在请求到达路由处理程序时处理。
请记住http的工作原理。当您在浏览器中输入http://example/api/v1/list
等网址时,这就是浏览器的功能。
- 它解析URL并将其分解为多个部分。它找到了
http
的协议,example
的主机/api/v1/list
的路径,并没有找到指定的端口。 - 如果未指定端口,则它将采用指定协议的默认端口。
http
的默认端口是端口80。 - 现在它需要主机
example
并在DNS中查找以获取IP地址。 - 然后,它与该IP地址和所需端口建立TCP连接。
- 建立TCP连接后,它会发送HTTP请求,如下所示。
例:
GET /api/vi/list HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Cookie: x=y
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Host: example
您将注意到该http请求中,路径是在没有域的情况下发送的,因为该域已用于获取IP地址并建立与该主机的连接。