创建服务器
引入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("服务器启动成功!");
})
版权声明:本文为m0_56175362原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。