signed

QiShunwang

“诚信为本、客户至上”

express案列

2021/6/9 8:46:56   来源:

创建服务器

引入express模块 创建服务器时不需要再引入http模块了
const express = require("express");
// 使用express方法创建一个实例。
let app = express();
//创建一个路由  get函数表示匹配get请求方式,函数有两个参数:第一个参数是匹配的路径,第二个参数是匹配成功后执行的操作。  
app.get("/",(req,res)=>{
  //函数有两个参数  第一个参数req表示请求的信息对象。第二个参数res是响应的信息对象。
  //express 会自动设置响应的类型和编码格式。
  res.send("<h1 style='color:brown'>使用express搭建服务器成功!</h1>");
})
// 监听端口
app.listen(3000);

实现路由案列

const express = require("express");
let app = express();
app.get("/",(req,res)=>{
  res.send("<h1 style='color:brown'>使用express搭建服务器成功!</h1>");
})
app.get("/index",(req,res)=>{
  res.send("<h1 style='color:brown'>欢迎进入首页</h1>");
})
app.get("/login",(req,res)=>{
  res.send("<h1 style='color:brown'>欢迎进入登录页面</h1>");
})
app.post("/register",(req,res)=>{
  res.send("<h1 style='color:brown'>注册成功!</h1>");
})

app.listen(3000);

中间件说明

/**
 * 中间件:
 *   本质上就是处理http请求的函数。
 *  作用:接收请求和发送请求之间的一系列操作。 
 *  一个中间件处理完,会返回给下一个中间件。
 * 中间件是按照从上往下的顺序去匹配的。
 */
 const express = require("express");
 let app = express();
 //next 放行 让控制权交给下一个中间件。
 app.get("/index",(req,res,next)=>{
   console.log("这是第一个index请求");
   next();
 })
 app.get("/index",(req,res,next)=>{
  console.log("这是第二个index请求");
   res.send("<h1 style='color:brown'>欢迎进入首页</h1>");
 })

 app.listen(3000);

const express = require("express");
let app = express();
// app.use 会匹配所有的请求方法   如果不写请求路径,则可以匹配所有的请求]
// 可以用来做登录拦截,网站维护公告、错误处理

//  app.use("/index",(req,res)=>{
//   res.send("<h1 style='color:brown'>欢迎进入首页</h1>");
//  });
app.use((req, res,next) => {
  req.name = "use方法"
  next();
});
app.get("/index", (req, res) => {
  res.send("req.name");
})

app.listen(3000);
const express = require("express");
let app = express();
//next 放行 让控制权交给下一个中间件。
app.get("/index",(req,res,next)=>{
  res.send("<h1 style='color:brown'>欢迎进入首页</h1>");
})
app.use((req,res,next)=>{
  res.send("<h1 style='color:brown'>今晚21:00-24:00网站维护!</h1>");
})

app.listen(3000);
/**
 * 错误处理中间件:
 *  处理程序中的一些错误。比如:路径不匹配,文件读取失败。
 *  一般将错误处理中间件写在最后
 */
const express = require("express");
const fs = require("fs");
let app = express();

app.get("/index", (req, res, next) => {
  fs.readFile("./demo1.html",(err,data)=>{
    if (err) {
      next(err);
    }
    res.send("读取成功")
  })
})

//next 放行 让控制权交给下一个中间件。
app.use((err, req, res,next) => {
  fs.writeFile("./log.txt",err,(err,data)=>{
   if (err) {
     console.log("读取失败"+err);
   }
  })
})
app.listen(3000);
/**
 * 路径不匹配
 */
 const express = require("express");
 let app = express();
 //next 放行 让控制权交给下一个中间件。

 app.get("/index",(req,res,next)=>{
   res.send("<h1 style='color:brown'>欢迎进入首页</h1>");
 })
 app.use((req,res)=>{
   res.status(404).send("<h1 style='color:brown'>路径不存在</h1>");
})
 app.listen(3000);
/**
 * 统一的错误处理中间件
 *  将错误按照一定的格式追加写入到本地文件
 *  格式:
 * -------------------
 *    错误名称:
 *    错误信息:
 *    错误时间:
 * ------------------
 */
const express = require("express");
const fs = require("fs");
const path = require("path");
const moment = require("moment")

//创建实例
let app = express();

app.get("/index",(req,res,next)=>{
  res.send("<h1 style='color:brown'>欢迎进入首页</h1>");
})

app.get("/readFile",(req,res,next)=>{
  fs.readFile("./demo2.js",(err,data)=>{
    if (err) {
      next(err);
    }else{
      res.send(data);
    }
  })
})

app.get("/login",(req,res,next)=>{
  try {
    // 可能出错误的代码写在这里
    const obj = JSON.parse("zhangsan");
    res.send(obj);
  } catch (error) {
    // 对错误的处理
    next(error);
  }
})

//错误处理中间件。 没有书写路径,可以匹配所有的请求,只要有请求调用next(),就有可能匹配到。
app.use((err,req,res,next)=>{
  const err_str = 
  `
  +---------------------------------------+
  错误名称:${err.name},\n
  错误信息:${err.message},\n
  错误时间:${moment(new Date()).format("YYYY-MM-DD hh:mm:ss")}\n
  +---------------------------------------+
  `
  fs.appendFile(path.join(__dirname,"err.log"),err_str,()=>{
    res.status(500).send("<h1 style='text-align:center'>服务器内部错误</h1>")
  })
})
app.listen(3000,()=>{
  console.log("服务器启动成功!");
})