长沙旅游网站开发,pc网站建设企业,本地使用宝塔安装wordpress,天津最好网站建设公司文章目录 Express框架1、初体验express2、什么是路由3、路由的使用3、获取请求参数4、电商项目商品详情场景配置路由占位符规则5、小练习#xff0c;根据id参数返回对应歌手信息6、express和原生http模块设置响应体的一些方法7、其他响应设置8、express中间件8.1、什么是中间件… 文章目录 Express框架1、初体验express2、什么是路由3、路由的使用3、获取请求参数4、电商项目商品详情场景配置路由占位符规则5、小练习根据id参数返回对应歌手信息6、express和原生http模块设置响应体的一些方法7、其他响应设置8、express中间件8.1、什么是中间件8.2、中间件的作用8.3、中间件的类型8.4、定义全局中间件8.5、定义路由中间件8.6、静态资源中间件 9、获取请求体数据10、防盗链的实现11、路由的模块化 Express框架
1、初体验express
// 导入express包
const express require(express)// 创建应用对象
const app express()// 创建路由
app.get(/home, (req, res) {res.end(hello express)
})// 启动服务监听端口
app.listen(3000, (){console.log(服务启动成功。。。)
})2、什么是路由
官方定义路由确定了应用程序如何响应客户端对特定端点的请求
3、路由的使用
// 导入express包
const express require(express)// 创建应用对象
const app express()// 创建路由
app.get(/home, (req, res) {res.end(hello express)
})// 创建路由
app.post(/login, (req, res) {res.end(login)
})// 匹配全部
app.all(/all, (req, res) {res.end(all)
})// 全都匹配不上就走这里
app.all(*, (req, res) {res.end(Not Found 404)
})// 启动服务监听端口
app.listen(3000, (){console.log(服务启动成功。。。)
})3、获取请求参数
const express require(express)// 创建应用对象
const app express()app.get(/request, (req, res) {// http模块方法console.log(原生获取url , req.url)console.log(原生获取请求方式 , req.method)console.log(原生获取http版本号 ,req.httpVersion)console.log(原生获取headers ,req.headers)// express 封装的方法console.log(express获取url , req.path)console.log(express获取请求参数 ,req.query);// 获取ip地址console.log(express获取ip地址 , req.ip);// 获取指定headers中的内容console.log(express获取指定header,req.get(host))res.setHeader(content-type, text/html;charsetutf-8)res.end(请求成功)
})app.listen(3000, () {console.log(服务启动成功监听端口3000)
})4、电商项目商品详情场景配置路由占位符规则
// 导入express模块
const express require(express)
// 创建应用对象
const app express()// 创建路由
// :id占位符所有这种格式的请求都会进入这里
app.get(/:id.html, (req, res) {// params上存储所有的请求参数id就是路由中的id字段名必须一致才能取出来console.log(req.params.id)res.setHeader(content-type, text/html;charsetutf-8)res.end(商品详情)
})// 启动服务
app.listen(3000, () {console.log(服务启动成功监听端口3000)
})5、小练习根据id参数返回对应歌手信息
const express require(express)const app express()const singers [{name: 周杰伦,id: 1},{name: 许嵩,id: 2},{name: 汪苏泷,id: 3}
]
// 根据id返回指定数据
app.get(/:id.html, (req, res) {const data singers.filter(item item.id req.params.id)console.log(data)if (data.length 0) {res.statusCode 404res.end(h1404 Not Found/h1)return}res.setHeader(content-type, text/html;charsetutf-8)res.end(JSON.stringify(data[0]))
})app.listen(3000, () {console.log(服务启动成功)
})6、express和原生http模块设置响应体的一些方法
const express require(express)const app express()app.get(/response, (req, res) {// 原生方法// 修改状态码res.statusCode 404res.statusMessage abcd// 设置响应头res.setHeader(111, 222)// 设置响应体res.write(hello express)res.end(response)// express 方法res.status(500)res.set(aaa,bbb)res.send(你好 我是send) // 使用send会自动配置响应头Content-Type:text/html; charsetutf-8中文不乱码res.status(500).set(aaa,bbb).send(你好 我是send) // 可以链式调用
})app.listen(3000, () {console.log(服务启动成功)
})7、其他响应设置
const express require(express)const app express()app.get(/other, (req, res) {// 重定向res.redirect(http://www.baidu.com)// 下载res.download(__dirname /index.js)// JSON响应res.json({name:你好})// 响应文件内容res.sendFile(__dirname ./text.html)
})app.listen(3000, () {console.log(服务启动成功)
})8、express中间件
8.1、什么是中间件
中间件本质是一个回调函数 中间件函数可以像路由回调一样访问请求对象request响应对象response
8.2、中间件的作用
中间件的作用就是使用函数封装公共操作简化代码
8.3、中间件的类型
全局中间件路由中间件
8.4、定义全局中间件
// 导入
const express require(express)
const fs require(fs)
const path require(path)const app express()// 声明中间件函数,共有三个参数请求报文。响应报文。和next函数
// next()函数如果后续有代码执行必须调用。
function recordMiddleware(req, res, next) {// 获取url和IP地址let { url, ip } reqfs.appendFileSync(path.resolve(__dirname, ./access.log), ip${ip}访问了${url}\r\n)next()
}// 使用中间件函数
app.use(recordMiddleware)app.get(/home, (req, res) {res.send(前台首页)
})app.get(/admin, (req, res) {res.send(后台首页)
})app.all(*, (req, res) {res.send(h1404 Not Found/h1)
})app.listen(3000, () {console.log(服务启动成功)
})8.5、定义路由中间件
const express require(express)// 创建应用对象
const app express()// 定义全局路由中间价函数
const checkCodeMiddleware (req, res, next) {let { code } req.queryif (code ! 521) {res.send(暗号错误)return}next()
}// 可以全局注册也可以局部使用直接在路由中调用
app.get(/home, checkCodeMiddleware, (req, res) {res.send(前台页面)
})app.get(/admin, (req, res) {res.send(后台页面)
})app.listen(3000, () {console.log(服务启动成功...)
})8.6、静态资源中间件
// 静态资源中间件设置 public就是静态资源目录。配置以后不管任何文件格式这个方法都会给我们配置好mime类型。
app.use(express.static(__dirname /public))9、获取请求体数据
要使用到一个中间件body-parser这个中间件有两个方法 先安装中间件npm i body-parser
const bodyParser require(body-parser)
// 解析JSON格式的请求体的中间件
const jsonParser bodyParser.json()
// 解析 querystring 格式请求体的中间件
const urlencodedParser bodyParser.urlencoded({extended:false})app.post(/login, urlencodedParser, (req,res){// 调用这个中间件以后会给req中添加一个body就是请求参数const {username} req.bodyres.send(username)
})10、防盗链的实现
防盗链就是指一个网站的一些静态资源通过判断请求头中的referer属性是否为本服务ip或者域名从而阻止一些外部系统访问资源。
const express require(express)const app express()// 静态资源中间价设置
app.use(express.static(__dirname /public))// 防盗链的原理主要是判断请求头中的referer 是否为自己服务的地址
const staticMiddleware (req, res, next) {// 检测请求头中的referer是否为 127.0.0.1// 获取refererlet referer req.get(referer)if (referer) {// 序列化refererlet url new URL(referer)let hostname url.hostnameconsole.log(hostname)if (hostname ! 127.0.0.1) {// 响应404res.status(404).send(h1404 Not Found/h1)}}next()
}app.use(staticMiddleware)app.get(/login, (req, res) {res.send(登录)
})app.listen(3000, () {console.log(服务启动成功...)
})11、路由的模块化
创建一个routers目录。创建homeRouters.js文件存放路由
const express require(express)
// 创建路由对象
const router express.Router()router.get(/admin, (req, res) {res.send(后台管理)
})// 暴露router
module.exports router 主要文件引入routers里面的文件使用app.use挂载到app上
const express require(express)
const homeRouters require(./routers/home.js)
const adminRouters require(./routers/admin.js)const app express()app.use(homeRouters)
app.use(adminRouters)app.all(*, (req, res) {res.send(h1404 Not Found/h1)
})app.listen(3000, () {console.log(服务启动成功...)
})全部文章 从0到1学习node.jsfs模块 从0到1学习node.jspath模块以及HTTP协议 从0到1学习node.jshttp模块 从0到1学习node.jsnpm