node框架 express
初始化和get请求
初始化项目
yarn init -y
安装框架
yarn add express
创建主js对象文件一个app.js
引入express
const express = require("express")
创建项目对象
const app= express()
监听是否有请求
端口
app.listen(3000,()=>{
//服务器启动执行一次的函数
console.log("服务器启动啦")
})
请求处理
路径 处理函数方法
app.get("/",(req,res)=>{
res.send(req.body)
body是get方法中页面传递过来的参数
})
post请求
我们使用第三方的包更简便的处理post请求参数(目前已经弃用,可以直接获取,不过我不会直接获取)
安装body-parser
yarn add body-parser
由于express中已经引用下载这个包了,我们则可以单独引用
const bodyParser = require('body-parser')
body-parser功能注册到项目app中
app.use(bodyParser.urlencoded({extended:false}))
解析json格式
app.use(bodyParser.json())
重定向
当我们在一个请求中跳转到另一个请求时,比如注册好点提交后转到登录时,我们可以用重定向来转换请求路径,在请求处理中
res.redirect("重定向路径")
all方法合并路径
当我们用相同的路径但请求的方法不一样时,我们可以用all方法来处理使代码更简洁
app.all('/register',(req.res)=>{
if(req.mother=='GET'){
}else if(req.mother=='POST'){
}
})
art-template模板引擎
首先安装包
yarn add art-template 然后 yarn add express-art-template
这个是express-art-template模板引擎
然后模板引擎的初始化和注册
app.engine('html',require('experss-art-template'))//引入引擎并采用html模板
项目环境设置,生产环境production 开发环境 develpoment
app.set('view options',{
debug:process.env.NODE_ENV !== 'development'
})
设置在哪个目录下查找模板文件
app.set('view',path.join(_dirname,'views'))
设置模板文件的的后缀名为html
app.set('view engine','html')
let data= {
num1=20.
num2=30
}
然后就可以简便的引用html文件了
app.get('/',(req,res)=>{
res.render("index",data) //返回index页面到浏览器并传递data数据给它
})
在index.html里
我们则可以使用art-template解析数据
<p> num1 = {{num1}} </p>
<p> num2 = {{num2}} </p>
num1 = 20
num2 = 30
express 中的路由对象
新建routes文件夹,在里面新建一个js文件
引入express
const express = require("express")
引入router
const router= express.Router()
然后我们之前用的app.get('/',(req,res)=>{})
现在全部改为让router管理
router.get('/',(req,res)=>{
console.log('改为router管理')
})\
导出router
module.exports = router
然后我们还需要注册到app.js里
假如我们之前创建的js文件叫做newroute
则需要在app.js里添加以下代码
const newrouter = require("./routes/newrouter")
app.use(newrouter)
请求预处理的钩子函数
在app.js里
const newrouter = require(./routes/newrouter)
function func(req,res,next){
在这里就可以进行预处理,比如校验登录
console.log("执行newrouter的路由接口函数之前先执行这个")
if(true){
res.sent("登录校验没有通过")
return 提前结束函数
}
next() 到这里去执行newrouter下一个函数,然后就去处理newrouter.js文件了
}
app.use(func,newrouter)
我们也可以把登录校验看成一个工具,把他单独封装到utils工具的包里
在根目录下创建utils文件夹,并创建登录校验的js文件
把函数放在这个js文件里并导出
function func(req,res,next){
在这里就可以进行预处理,比如校验登录
console.log("执行newrouter的路由接口函数之前先执行这个")
if(true){
res.sent("登录校验没有通过")
return
}
next()
app.use(func,newrouter)
}
module.exports = {
checkLogin
}
然后我们在原来的文件中导入
const utils = require("./utils/index.js")
并修改use文件
app.use(utils.func,newrouter)
pathinfo参数获取
其实也就是动态路由
当我们在html中转发的路径是
/index/1
/index/2
/index/3
/index/4
我们在路由里面应该配置:号
app.get("/index:id",(req,res)=>{
{id:1}
console.log(req.params)
1
console.log(req.params.id)
})
art-template过滤器
html页面
<p>{{num | timeramp }}</p>
js
const template = require("art-template")
过滤器名字 这个value就算html | 前面的值
template.defaults.imports.timestamp = function(value){
return value * 1000 这里过滤器返回值
};
art-template模板继承
模板继承就是一个html文件可以继承另一个html文件的全部内容,然后自己再在里面写自己的内容。
常见于网页中比如说菜单侧边栏,侧边栏不变,也就是继承的父类不变,继承的页面子类发生改变
我们现在写一个父类
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>firstviev</title>
</head>
<body>
<p>父类</p>
{{block 'newviev'}}
这里是子类显示的地方
{{/block}}
</body>
</html>
再写一个子类
{{extend './firstviev'}}
{{block 'newviev'}}
<p>这里是子类</p>
{{/block}}
设置获取cookie
引入模块
const cookieParase = require('cookie-parser');
使用模块
app.use(cookieParase())
app.get("setcook",(req,res)=>{
设置cookie 健 值 设置let过期时间 单位毫秒
res.cookie("name","node",{maxAge:60*60*2*1000})
res.cookie("age",11) 这里没有设置时间,则关闭浏览器时cookie失效。
res.send("设置了cookie")
})
app.get("getcook",(req,res)=>{
let name = req.cookies["name"]
let age = req.cookies["age"]
console.log(req.cookies["name"]);
console.log(req.cookies["age"]);
res.send(`获取到的cookie信息为:${name},${age}`);
})
设置获取session
引入模块
const cookieSession = require('cookie-session');
使用模块
app.use(cookieSession({
name:"my_session" //起个名字
keys:["OANSOJDNOBOWIBAOISBJDBNNWJANOSD"] 随便敲 他对你这个进行加密进行加工使用
maxAge:60*60*24*1000 //时间
}))
app.get("setcook",(req,res)=>{
设置cookie 健 值 设置let过期时间 单位毫秒
req.session["name"]="nodesession"
req.session["age"]=12; 这里没有设置时间,则关闭浏览器时cookie失效。
req.send("设置了session")
})
app.get("getcook",(req,res)=>{
let name = req.session["name"]
let age = req.session["age"]
res.send(`获取到的session信息为:${name},${age}`);
})
session和cookie的关系
![image.png](https://img-blog.csdnimg.cn/img_convert/91802ac017e35dcfe3f3a2c4e1891ea4.png#clientId=u329e2a42-74e0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=375&id=u989b2ebd&margin=[object Object]&name=image.png&originHeight=750&originWidth=1697&originalType=binary&ratio=1&rotation=0&showTitle=false&size=290528&status=done&style=none&taskId=u222a47e4-7b48-4bf8-927a-b6fb077b4b5&title=&width=848.5)
CORS跨域
yarn add cors
const cors = require("cors")
在路由之前调用
app.use(cors())