寒假学习记录16:Express框架(Node)

后续会补充

1.引入express

1.先下载express框架

创建一个package.json格式的文件,里面写入

复制代码
{
    "dependencies": {
      "express": "~4.16.1" //express版本号
    }
}

然后打开终端输入

复制代码
npm i
2.引入express模块
javascript 复制代码
const express = require("express");
const app = express();

2.使用express

监听端口号
javascript 复制代码
const port = 5000;
app.listen(port,()=>{
    console.log(`server listen on ${port}`)
})
处理请求
javascript 复制代码
语法:app.请求方式("请求路径",(req,res)=>{})

如果不写请求路径,则匹配所有路径 --> 同 " * "

:路径参数名 --> 匹配动态路径参数,会自动匹配

例:

javascript 复制代码
app.get("/news/:id/:index",(req,res)=>{
    console.log("请求头",req.headers);
    console.log("请求路径",req.path);
    //会自动转换为对象
    console.log("query",req.query);    //问号后面的
    console.log("params",req.params); //问号前面的动态路径参数
});
处理响应
javascript 复制代码
语法:res.send(响应内容);

例:

javascript 复制代码
app.get("/news/:id/:index",(req,res)=>{
    res.send({      //send无需手写end()
        id:123,
        name:"aa"
    })  
    res.setHeader("a","123");//设置响应头
    res.redirect(302,"重定向路径")//设置重定向
});

3.Express中间件

类似封装一个功能函数

中间件的使用,可以不写请求路径(匹配所有情况)

javascript 复制代码
app.use("请求路径",require("中间件"))
1.处理错误的中间件小案例
javascript 复制代码
//处理错误的中间键
module.exports = (err,req,res,next)=>{
    if (err) {  //如果发生了错误
        const errObj = {
            code: 500,
            msg: err instanceof Error ? err.message : err,
        };
        res.status(500),send(errObj);
    } else {
        next(); //如果没有错误发生就执行下一个函数
    }
}
2.处理静态资源中间件

express.static()

当请求时,会根据请求路径,从指定的目录中寻找是否存在该文件

如果存在:直接响应文件内容,而不再移交给后续的中间件

如果不存在:则直接移交给后续的中间件处理

默认情况下,如果映射的结果是一个目录,则会自动使用index.html文件

更改默认文件

javascript 复制代码
app.use(express.static(..., {
    index: "abc.html"    //在这里配置就行
}))

用例:

javascript 复制代码
const path = require("path");
const staticRoot = path.resolve(__dirname,"../public");
app.use(express.static(staticRoot))
3.处理数据中间件

express.urlencoded() (x-www-form-urlencoded)

javascript 复制代码
app.use(express.urlencoded({
    extended: true
}))

express.json() (JSON)

javascript 复制代码
app.use(express.json())

两个一般一起使用

javascript 复制代码
app.use(express.urlencoded({
    extended: true
}))
app.use(express.json())

Express路由

用法 (方便处理基路径)

创建

javascript 复制代码
const express = require("express");
const router = express.Router();

router.get("/",(req,res)=>{
    res.send("具体的处理");
})

module.exports = router;

使用

javascript 复制代码
app.use("基路径",require("路由路径"))

浏览器发请求给服务器

服务器通过cookie给浏览器发验证信息

浏览器发(请求+cookie验证信息)给服务器

(浏览器和服务器都存数据)(数据过多服务器会炸)

session (类似加密后的验证信息)

浏览器发请求给服务器

服务器通过cookie给浏览器发session

浏览器发(请求+cookiesession)给服务器

(浏览器和服务器都存数据)(数据过多服务器会炸)

token (JSON Web Token JWT)(类似身份凭证)

浏览器发请求给服务器

服务器通过cookie给浏览器发身份凭证

浏览器发(请求+cookie身份凭证)给服务器

(浏览器存数据,服务器只存一个密钥就行)


nodemon

npm i -g nodemon 安装

nodemon 要使用的js文件 启动

如果报错的话

1.以管理员的身份打开powerShell

2.输入set-ExecutionPolicy RemoteSigned 回车

3.输入y 回车

相关推荐
剪刀石头布啊10 分钟前
js能被遍历的集合有哪些特征,为何能被遍历
前端
剪刀石头布啊12 分钟前
js解构
前端
剪刀石头布啊17 分钟前
防抖功能的逐步递进
前端
剪刀石头布啊22 分钟前
对象的大小比较与面向对象思考
前端
最爱老式锅包肉2 小时前
《HarmonyOS技术精讲-ArkWeb》桥接两岸:JSBridge原生与Web互调
前端·华为·harmonyos
IT_陈寒3 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
茯苓gao3 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
踩着两条虫3 小时前
可视化 vs 终端 vs 云端:VTJ.PRO、Claude Code、Codex 三强横评
前端·vue.js·人工智能·低代码·架构
kyriewen3 小时前
Godot 全面封杀 Vibe Coding,作为每天用 AI 写代码的人,我反而觉得这是件好事
前端·ai编程·claude
前进的搬砖er4 小时前
4.three.js的几何体、纹理、光源、材质、uv属性 讲义
前端