app.use在我的代码中指向哪里?

时间:2017-12-26 15:28:11

标签: node.js

我是初学者,我无法真正理解它指向的位置以及这段特定代码的含义

app.use(' / api / v1',路由器);

特别是/ 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}`);`

2 个答案:

答案 0 :(得分:0)

这意味着当请求到达'/ api / v1'时将使用给定的路由器 这样做是为了将您的应用程序分解为不同的独立模块。

您可能需要查看docs

答案 1 :(得分:0)

代码行:

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.com/api/v1
http://192.168.1.29/api/v1/list

定义路由时不需要主机,因为主机名已在请求到达路由处理程序时处理。

请记住http的工作原理。当您在浏览器中输入http://example.com/api/v1/list这样的网址时,这就是浏览器的功能。

  1. 它解析URL并将其分解为多个部分。它找到http的协议,example.com的主机/api/v1/list的路径,并且找不到指定的端口。
  2. 如果未指定端口,则它将采用指定协议的默认端口。 http的默认端口是端口80。
  3. 现在它需要主机example.com并在DNS中查找以获取IP地址。
  4. 然后,它与该IP地址和所需端口建立TCP连接。
  5. 建立TCP连接后,会发送HTTP请求,如下所示。
  6. 示例:

    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.com
    

    您将注意到该http请求中,路径是在没有域的情况下发送的,因为该域已用于获取IP地址并建立与该主机的连接。