📜  Morgan.js 简介

📅  最后修改于: 2022-05-13 01:56:20.240000             🧑  作者: Mango

Morgan.js 简介

Morgan 是一个记录 HTTP 请求和错误的中间件。中间件只是一个可以访问请求和响应生命周期方法的函数。我们可以使用预定义格式或创建新格式来格式化我们的日志。

摩根安装:

第 1 步:您可以访问 morgan 获取文档。可以使用此命令安装该软件包。

npm install morgan

步骤2:安装完成后,您可以使用以下命令检查软件包的安装版本:

npm ls morgan

第 3 步:要开始使用 morgan,请创建一个名为 index.js 的文件。可以使用此命令将包包含在 index.js 中。

const morgan = require('morgan')

第 4 步:要使用 morgan,我们必须调用一个实例并将其作为参数传递给 app.use(),它是 HTTP 请求之前的快速中间件。这可以按如下方式完成:

app.use(morgan(string));

上面的字符串定义了我们想要记录信息的格式。

项目结构:项目结构将如下图所示。

摩根有 我们可以直接使用五种预定义的格式来获取所需的信息。这些是:

  1. 组合:它给出了 Apache 标准组合格式的日志。
  2. common:它提供标准 Apache 通用日志输出。
  3. dev:这是一种颜色编码的日志格式。
  4. short:比默认格式短。它还包括响应时间。
  5. tiny:它是最短的日志,包含的信息很少。

所有这些预定义格式的输出格式都可以在这里找到。

示例 1:

index.js
// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Using combined predefined format
app.use(morgan("combined"));
  
// Creating an endpoint where 
// requests can be made and
// we can get logs
app.get("/", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});


index.js
// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Using dev predefined format
// Returns
app.use(morgan("dev"));
  
// Creating an endpoint where
// requests can be made and
// we can get logs
app.get("/home", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});


index.js
// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Creating customised logs
// :method return method used like - GET,POST
// :url returns to which url request was made
// :status returns the status returned from req like - 200,404
// :response-time returns the time it took to give response
// Rest things are printed as it is
app.use(
  morgan(
    "Method- :method URL- :url Status- :status ResponseTime-  :response-time ms"
  )
);
  
// Creating an endpoint where
// requests can be made and
// we can get logs
app.get("/home", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});


index.js
// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Creating custom token
// with name time
morgan.token(
  "time",
  " :method request for :url was received.Response time: :response-time"
);
  
// Using the name of
// token we created above
app.use(morgan("time"));
  
// Creating an endpoint where
// requests can be made and
// we can get logs
app.get("/home", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});


运行应用程序的步骤:在终端中运行以下命令来执行 index.js 文件。

node index.js

输出:

::1 - - [10/Feb/2021:22:18:30 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0
(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/88.0.4324.150 Safari/537.36"

当您访问 https://localhost:5000 时,上述日志将出现在控制台中。日志为我们提供了各种信息,例如发出请求的日期和时间、在这种情况下为GET的请求方法、向哪个 URL 发出请求(即 ' /'等等)。

示例 2:

index.js

// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Using dev predefined format
// Returns
app.use(morgan("dev"));
  
// Creating an endpoint where
// requests can be made and
// we can get logs
app.get("/home", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});

输出:

当您访问“https://localhost:5000”时,输出将是:

GET / 404 4.031 ms - 139

由于我们没有“/” URL 的任何端点 我们最终使用GET类型的方法和响应时间(以毫秒为单位)得到 404 错误。

当您访问“https://localhost:5000/home”时,输出将是:

GET /home 200 3.416 ms - 13

在我们的程序中,我们创建了一个“/home”端点,因此我们得到了 200 的响应作为回报。

示例 3:

index.js

// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Creating customised logs
// :method return method used like - GET,POST
// :url returns to which url request was made
// :status returns the status returned from req like - 200,404
// :response-time returns the time it took to give response
// Rest things are printed as it is
app.use(
  morgan(
    "Method- :method URL- :url Status- :status ResponseTime-  :response-time ms"
  )
);
  
// Creating an endpoint where
// requests can be made and
// we can get logs
app.get("/home", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});

输出:

Method- GET URL- /home Status- 200 ResponseTime-  3.392 ms

在上面的程序中,我们自定义了我们的输出日志。格式为后跟信息名称。这些是预定义的标记,可以通过在它们前面使用:添加。

我们还可以借助 .token() 方法创建自定义令牌。请参见以下示例:

示例 4:

index.js

// Requiring modules
const express = require("express");
const morgan = require("morgan");
const app = express();
  
// Creating custom token
// with name time
morgan.token(
  "time",
  " :method request for :url was received.Response time: :response-time"
);
  
// Using the name of
// token we created above
app.use(morgan("time"));
  
// Creating an endpoint where
// requests can be made and
// we can get logs
app.get("/home", (req, res) => {
  res.send("GeeksforGeeks");
});
  
// Running on PORT
const PORT = 5000;
  
app.listen(PORT, () => {
  console.log(`Running on PORT: ${PORT}`);
});

输出:

GET request for /home was received.Response time: 5.567

Morgan 是一个非常简单的记录器,它可以灵活地记录 HTTP 请求并为我们提供所需的信息。所以这就是我们如何在我们的应用程序中使用摩根