本文旨在学习建立express结构,如想快速建立实现灵敏开发直接参考:express快速运用程序生成器。

1.运用nodemon 第三方依靠来主动监听文件的变化并重新发动

1.1 运用npm下载nodemon

$ npm i nodemon

1.2 修改npm包装备

---package.json
{
 "name": "acquaintance",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "dev": "nodemon app.js"
  },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "dependencies": {
  "koa": "^2.13.1"
  },
 "devDependencies": {
  "nodemon": "^2.0.7"
  }
}

2.装备express测验程序

2.1 运用npm装置express

$ npm install express

2.2 编写express测验程序

---index.js
const express = require("express");
const app = express();
​
// 增加根路由,回来 "hello world!"
app.get("/", (req, res) => {
  res.send("hello world!");
});
​
// 增加测验路由,用于测验 GET 恳求
app.get("/test", (req, res) => {
  res.send("This is a test route for GET request.");
});
​
// 增加测验路由,用于测验 POST 恳求
app.post("/test", (req, res) => {
  res.send("This is a test route for POST request.");
});
​
// 增加测验路由,用于测验 OPTIONS 恳求
app.options("/test", (req, res) => {
  res.send("This is a test route for OPTIONS request.");
});
​
// 增加测验路由,用于测验 DELETE 恳求
app.delete("/test", (req, res) => {
  res.send("This is a test route for DELETE request.");
});
​
// 增加测验路由,用于测验 PUT 恳求
app.put("/test", (req, res) => {
  res.send("This is a test route for PUT request.");
});
​
app.listen("9999", (error) => {
  if (error) {
    console.log("服务器发动失利!");
    return;
   }
  console.log("服务器发动成功!");
});
​

2.3 经过浏览器测验接口

此运用程序发动服务器并侦听端口 9999 上的连接。该运用程序呼应“Hello World!” 用于恳求根 URL( /) 或路由。对于一切其他途径,它将呼应404 Not Found。

2.3.1 发动运用 npm run dev

NodeJs快速开发运用(五)-express根本运用

2.3.2 浏览器输入链接并展现

NodeJs快速开发运用(五)-express根本运用

测验其他get链接:localhost:9999/test

NodeJs快速开发运用(五)-express根本运用

3.路由装备

3.1 创立routes文件夹,按模块管理route

image-20231201135428372转存失利,主张直接上传图片文件

-routes/test.js
/**
 * @fileoverview 路由文件,包含用于测验不同恳求方法的路由。
 * @module routes/test
 */
const express = require("express");
const router = express.Router()
/**
 * GET恳求测验路由
 * @name GET /test
 * @function
 * @memberof module:routes/test
 * @param {Object} req - 恳求目标
 * @param {Object} res - 呼应目标
 */
router.get("/test", (req, res) => {
    res.send("This is a test route for GET request.");
});
/**
 * POST恳求测验路由
 * @name POST /test
 * @function
 * @memberof module:routes/test
 * @param {Object} req - 恳求目标
 * @param {Object} res - 呼应目标
 */
router.post("/test", (req, res) => {
    res.send("This is a test route for POST request.");
});
/**
 * OPTIONS恳求测验路由
 * @name OPTIONS /test
 * @function
 * @memberof module:routes/test
 * @param {Object} req - 恳求目标
 * @param {Object} res - 呼应目标
 */
router.options("/test", (req, res) => {
    res.send("This is a test route for OPTIONS request.");
});
/**
 * DELETE恳求测验路由
 * @name DELETE /test
 * @function
 * @memberof module:routes/test
 * @param {Object} req - 恳求目标
 * @param {Object} res - 呼应目标
 */
router.delete("/test", (req, res) => {
    res.send("This is a test route for DELETE request.");
});
/**
 * PUT恳求测验路由
 * @name PUT /test
 * @function
 * @memberof module:routes/test
 * @param {Object} req - 恳求目标
 * @param {Object} res - 呼应目标
 */
router.put("/test", (req, res) => {
    res.send("This is a test route for PUT request.");
});
module.exports = router
-routes/user.js
/**
 * @fileoverview 该文件包含了用于处理 GET 恳求的用户路由。
 * @module routes/user
 */
const express = require("express");
const router = express.Router()
/**
 * GET /user
 * 这是一个用于处理 GET 恳求的用户路由。
 * @param {Object} req - 恳求目标。
 * @param {Object} res - 呼应目标。
 */
router.get("/user", (req, res) => {
    res.send("这是一个用于处理 GET 恳求的用户路由");
})
router.get("/userInfo", (req, res) => {
    const {id,name}=req.query
    res.send("用户id" id "r用户名字" name);
})
module.exports = router

装置http-errors

$ npm install  http-errors
-index.js
/**
 * Express运用程序的进口文件
 * @module index
 */
const express = require("express");
const httpErrors = require("http-errors");
const testRouter = require("./routes/test");
const userRouter = require("./routes/user");
const app = express();
// 增加根路由,回来 "hello world!"
app.get("/", (req, res) => {
    res.send("hello world!");
});
app.use(testRouter);
app.use(userRouter);
// 处理404过错
app.use(function (req, res, next) {
    next(httpErrors(404));
});
// 处理反常过错
app.use(function (err, req, res, next) {
    // 设置局部变量,仅供给开发中的过错
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    // 烘托过错页面
    res.status(err.status || 500);
    res.render('error');
});
/**
 * 发动Express运用程序的服务器
 * @param {string} port - 服务器监听的端口号
 * @param {function} callback - 服务器发动成功后的回调函数
 */
app.listen("9999", (error) => {
    if (error) {
        console.log("服务器发动失利!");
        return;
    }
    console.log("服务器发动成功!");
});
3.2 页面测验

根底功能测验

localhost:9999/

NodeJs快速开发运用(五)-express根本运用

localhost:9999/userinfo?id=10&name=hhh

NodeJs快速开发运用(五)-express根本运用

localhost:9999/test

NodeJs快速开发运用(五)-express根本运用

过错测验 localhost:9999/test/hhh

NodeJs快速开发运用(五)-express根本运用

4.运用模板引擎

能够运用模板引擎烘托页面

下载pug模板引擎

$ npm install pug --save

在 Express 能够出现模板文件之前,有必要设置以下运用程序设置:

  • views:模板文件地点目录。例如:app.set('views', './views')
  • view engine:要运用的模板引擎。例如:app.set('view engine', 'pug')

在设置视图引擎之后,不用指定该引擎或者在运用程序中装入模板引擎模块;Express 在内部装入此模块.

views 目录中创立名为 index.pug 的 Pug 模板文件

NodeJs快速开发运用(五)-express根本运用

-views/index.pug

​
extends layout
​
block content
 h1= title
 p Welcome to #{title}

-views/error.pug

extends layout
​
block content
 h1= message
 h2= error.status
 pre #{error.stack}

-views/layout.pug

doctype html
html
 head
  title= title
  link(rel='stylesheet', href='/stylesheets/style.css')
 body
  block content

随后创立路由以出现 index.pug 文件。假如未设置 view engine 特点,有必要指定 view 文件的扩展名。

运用模板引擎

-index.js

/**
 * Express运用程序的进口文件
 * @module index
 */const express = require("express");
const httpErrors = require("http-errors");
const path=require("path")
const testRouter = require("./routes/test");
const userRouter = require("./routes/user");
​
const app = express();
​
//运用模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
​
// 增加根路由,回来 "hello world!"
app.get("/", (req, res) => {
  res.send("hello world!");
});
​
app.use(testRouter);
app.use(userRouter);
​
// 处理404过错
app.use(function (req, res, next) {
  next(httpErrors(404));
});
​
// 处理反常过错
app.use(function (err, req, res, next) {
  // 设置局部变量,仅供给开发中的过错
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
​
  // 烘托过错页面
  res.status(err.status || 500);
  res.render('error');
});
​
/**
 * 发动Express运用程序的服务器
 * @param {string} port - 服务器监听的端口号
 * @param {function} callback - 服务器发动成功后的回调函数
 */
app.listen("9999", (error) => {
  if (error) {
    console.log("服务器发动失利!");
    return;
   }
  console.log("服务器发动成功!");
});
​
检查页面作用

NodeJs快速开发运用(五)-express根本运用

5.运用morgan日志服务中间件

5.1 下载morgan

$ npm install morgan

5.2 运用

–index.js

/**
 * Express运用程序的进口文件
 * @module index
 */
const express = require("express");
const httpErrors = require("http-errors");
const path=require("path")
const logger = require('morgan');
const testRouter = require("./routes/test");
const userRouter = require("./routes/user");
const app = express();
//运用模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
//日志服务中间件
app.use(logger('dev'));
// 增加根路由,回来 "hello world!"
app.get("/", (req, res) => {
    res.send("hello world!");
});
app.use(testRouter);
app.use(userRouter);
// 处理404过错
app.use(function (req, res, next) {
    next(httpErrors(404));
});
// 处理反常过错
app.use(function (err, req, res, next) {
    // 设置局部变量,仅供给开发中的过错
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    // 烘托过错页面
    res.status(err.status || 500);
    res.render('error');
});
/**
 * 发动Express运用程序的服务器
 * @param {string} port - 服务器监听的端口号
 * @param {function} callback - 服务器发动成功后的回调函数
 */
app.listen("9999", (error) => {
    if (error) {
        console.log("服务器发动失利!");
        return;
    }
    console.log("服务器发动成功!");
});

5.3 测验

NodeJs快速开发运用(五)-express根本运用

6.增加调试与过错处理

导出app

–index.js

/**
 * Express运用程序的进口文件
 * @module index
 */
const express = require("express");
const httpErrors = require("http-errors");
const path = require("path");
const logger = require('morgan'); //记录日志
var cookieParser = require('cookie-parser'); //cookie解析器
const testRouter = require("./routes/test");
const userRouter = require("./routes/user");
​
const app = express();
​
// 运用模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
​
// 日志服务中间件
app.use(logger('dev'));
​
app.use(express.json());//用于解析 JSON 格局的恳求体 当客户端发送一个包含 JSON 数据的 POST 或 PUT 恳求时,Express.js 会主动解析恳求体中的 JSON 数据,使其能够经过 req.body 访问。
app.use(express.urlencoded({ extended: false }));//解析 URL 编码的恳求体
app.use(cookieParser());//cookie-parser 会解析 cookies,并将结果增加到 req.cookies 目标中。
app.use(express.static(path.join(__dirname, 'public')));//装备为供给 public 目录下的静态文件// 增加根路由,回来 "hello world!"
/**
 * 根路由处理函数
 * @param {Object} req - 恳求目标
 * @param {Object} res - 呼应目标
 */
app.get("/", (req, res) => {
  res.send("hello world!");
});
​
app.use(testRouter);
app.use(userRouter);
​
// 处理404过错
app.use(function (req, res, next) {
  next(httpErrors(404));
});
​
// 处理反常过错
app.use(function (err, req, res, next) {
  // 设置局部变量,仅供给开发中的过错
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
​
  // 烘托过错页面
  res.status(err.status || 500);
  res.render('error');
});
​
// /**
//  * 发动Express运用程序的服务器
//  * @param {string} port - 服务器监听的端口号
//  * @param {function} callback - 服务器发动成功后的回调函数
//  */
// app.listen("9999", (error) => {
//   if (error) {
//     console.log("服务器发动失利!");
//     return;
//   }
//   console.log("服务器发动成功!");
// });
​
module.exports = app;

装置debug

$ npm install debug

装备发动参数

–bin/www.js

#!/usr/bin/env node
var app = require('../index');
var debug = require('debug')('myapp:server');
var http = require('http');
​
/**
 * 获取端口号
 */
var port = normalizePort(process.env.PORT || '9999');
app.set('port', port);
​
/**
 * 创立 HTTP 服务器。
 */
var server = http.createServer(app);
​
/**
 * 事情监听器,用于处理服务器的 "error" 事情。当服务器发动失利时,会触发 "error" 事情。
 */
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
​
​
function normalizePort(val) {
 var port = parseInt(val, 10);
​
 if (isNaN(port)) {
  // 命名管道
  return val;
  }
​
 if (port >= 0) {
  // 端口号
  return port;
  }
​
 return false;
}
​
/**
 * 事情监听器,用于处理服务器的 "error" 事情。当服务器发动失利时,会触发 "error" 事情。
 */
function onError(error) {
 if (error.syscall !== 'listen') {
  throw error;
  }
​
 // 处理特殊的过错类型,并给出友爱的过错提示
 var bind = typeof port === 'string'
  ? 'Pipe '   port
   : 'Port '   port;
​
 // 处理特殊的过错类型,并给出友爱的过错提示
 switch (error.code) {
  case 'EACCES':
   console.error(bind   ' requires elevated privileges');
   process.exit(1);
   break;
  case 'EADDRINUSE':
   console.error(bind   ' is already in use');
   process.exit(1);
   break;
  default:
   throw error;
  }
}
​
/**
 * 事情监听器,用于处理服务器的 "listening" 事情。当服务器开端在指定的端口上监听恳求
 */
function onListening() {
 var addr = server.address();
 var bind = typeof addr === 'string'
  ? 'pipe '   addr
   : 'port '   addr.port;
 debug('Listening on '   bind);//打印出服务器正在监听的地址和端口。
}

更改npm包发动项

–package.json

{
 "name": "xy-express-admin",
 "version": "1.0.0",
 "description": "express建立爬虫体系",
 "main": "index.js",
 "scripts": {
  "dev": "nodemon ./bin/www"
  },
 "author": "",
 "license": "ISC",
 "dependencies": {
  "cookie-parser": "^1.4.6",
  "debug": "^4.3.4",
  "express": "^4.18.2",
  "http-errors": "^2.0.0",
  "morgan": "^1.10.0",
  "nodemon": "^3.0.1",
  "pug": "^3.0.2"
  }
}

7.express 快速运用程序生成器

以上对于学习的朋友来说能够操练,对于快速开发的同学能够直接生成程序,

能够运用运用程序生成工具express-generator快速创立运用程序结构。

运用以下指令运转运用程序生成器npx(Node.js 8.2.0 中供给)。

$ npx express-generator

Pug:视图引擎作为编程术语它首要意思是指“进行视图烘托的模块”。而 Express 结构中最常用的两个视图引擎是 Pug 和 EJS 。需要留意的是,Pug 前期的名称是 Jade 由于某些原因不得已改名 。

另外,Express 并没有指定有必要运用何种引擎。只需该视图引擎的设计契合 Express API 规范,你就能够将其运用到工程中。

$ express --view=pug myapp

然后装置依靠项:

$ cd myapp
$ npm install

发动程序

$ npm run start