最新要闻
- 幺妹带你慢慢耍歌词完整版_请问老师们有谁知道幺妹带你慢慢耍歌词曲谱 这首歌确实不错好听
- 拒绝录用有文身员工 老板回应被威胁:看不惯年轻人必教育到底
- 滚动:《塞尔达传说:王国之泪》掉帧严重:任天堂Switch性能不够用了
- 排面!理想L7成卢森堡大使馆官方用车:“这是中国最棒的车”_关注
- 环球今日讯!预制半成品、来“料”加工、网上销售 普陀警方捣毁一伪造、买卖身份证件黑色产业链
- 今日精选:万家基金尹诚庸离任6只基金
- iQOO首款降噪无线耳机来了:将与Neo8系列同步推出
- 悲惨的5G基站:你敢建?我就敢拆!
- 害怕失去灵魂?大众汽车:我们没使用华为车机软件|环球快讯
- 焦点热议:小黑旗舰升级13代酷睿!联想2023款ThinkPad X1 Carbon国内发布
- 世界快看点丨马斯克再度催生:再不生娃人类就要灭亡了
- 苏联题材科幻动作游戏《原子之心》Steam 史低促销
- 天天热资讯!斗罗大陆:为何唐三成为海神后,只赠予了吉祥一个神赐魂环,
- 我国本月将发射神舟十六号载人飞船:与神舟十五号乘组在轨交接-消息
- 【世界速看料】充电时 先插手机还是充电器?这几种方法都错了
- 正面挑战微软!谷歌宣布将推出AI写代码功能
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
express框架的基本使用 环球新资讯
express框架的基本使用
1、express介绍
express是基于Node.js平台的极简、灵活的WEB应用开发框架。简单来说,express就是一个封装好的工具包,封装了很多功能,便于开发WEB应用(HTTP服务)
2、express使用
2.1、express下载
npm i express
(资料图片仅供参考)
// 导入const express = require("express");// 创建应用对象const app = express();// 创建路由app.get("/home", (req, res) => { res.end("hello express");});app.listen(9000, () => { console.log("端口监听中...");});
2.2、express路由
一个路由有三个部分组成,请求方法、路径和回调函数。
// 导入const express = require("express");// 创建应用对象const app = express();// 创建路由app.get("/home", (req, res) => { res.end("hello express");});app.get("/", (req, res) => { res.end("home");});app.post("/login", (req, res) => { res.end("test");});app.all("/test", (req, res) => { res.end("all test");});// 404响应,上面没有一个匹配就走这个路由app.all("*", (req, res) => { res.end("404");});app.listen(9000, () => { console.log("端口监听中...");});
2.3、获取请求报文参数
// 导入const express = require("express");// 创建应用对象const app = express();// 创建路由app.get("/request", (req, res) => { // 原生操作 console.log(req.method); console.log(req.url); console.log(req.httpVersion); console.log(req.headers); // express操作 console.log(req.path); console.log(req.query); // 获取ip console.log(req.ip); // 获取请求头 console.log(req.get("host"));});app.listen(9000, () => { console.log("端口监听中...");});
2.4、获取路由参数
// 导入const express = require("express");// 创建应用对象const app = express();// 创建路由app.get("/:id.html", (req, res) => { // 获取URL路由参数 console.log(req.params.id);});app.listen(9000, () => { console.log("端口监听中...");});
2.5、响应设置
express封装了一些API方便给客户端响应数据,并且兼容原生HTTP模块的获取方式。
// 导入const express = require("express");// 创建应用对象const app = express();// 创建路由app.get("/response", (req, res) => { // 1、express中设置响应的方式兼容HTTP模块的方式 res.statusCode = 404; res.statusMessage = "xxx"; res.setHeader("abc","xyz"); res.write("响应体"); res.end("xxx"); // 2、express的响应方法 res.status(500); res.set("xxx", "yyy"); // 设置响应头 res.send("xxx"); // 设置响应体 // 连贯操作 res.status(404).set().send() // 3、其他响应 res.redirect("http://www.baidu.com"); // 重定向 res.download("./package.json"); // 下载响应 res.json(); // 响应JSON res.sendFile(__dirname + "/home.html"); // 响应文件内容});app.listen(9000, () => { console.log("端口监听中...");});
2.6、express中获取请求体的数据
express可以使用body-parser包处理请求体。
安装:npm i body-parser
使用:
// 导入const express = require("express");const bodyParser = require("body-parser");// 创建应用对象const app = express();// 解析JSON格式的请求体的中间件const jsonParser = bodyParser.json();// 解析querystring格式请求体的中间件const urlencodedParser = bodyParser.urlencoded({ extended: false});// 创建路由规则app.get("/login", (req, res) => { // res.send("表单页面"); res.sendFile(__dirname + "/index.html");});app.post("/login", urlencodedParser, (req, res) => { console.log(req.body); res.send("获取用户数据");});app.listen(9000, () => { console.log("端口监听中...");});
3、中间件
3.1、什么是中间件
Middleware本质上是一个回调函数。可以像路由一样访问请求对象和响应对象。
作用:用于封装公共操作,简化代码。
3.2、类型
- 全局中间件
- 路由中间件
3.3、全局中间件
每一个请求到达服务端之后,都会执行全局中间件函数。
// 导入const express = require("express");const fs = require("fs");const path = require("path");// 创建应用对象const app = express();// 声明中间件函数function recordMiddleware(req, res, next) { // 获取 url 和 ip let { url, ip } = req; // 将信息保存在文件中 access.log fs.appendFileSync(path.resolve(__dirname, "./access.log"), `${url} ${ip}\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("404 no found");});app.listen(9000, () => { console.log("端口监听中...");});
3.4、路由中间件
// 导入const express = require("express");// 创建应用对象const app = express();// 创建路由app.get("/home", (req, res) => { res.send("前台首页"); });// 声明中间件let checkCodeMiddlerware = (req, res, next) => { if (req.query.code === "521") { next(); } else { res.send("暗号错误"); }}app.get("/admin", checkCodeMiddlerware, (req, res) => { res.send("后台首页"); });app.get("/setting", checkCodeMiddlerware, (req, res) => { res.send("设置页面"); });app.all("*", (req, res) => { res.send("404 no found");});app.listen(9000, () => { console.log("端口监听中...");});
3.5、静态资源中间件
express内置处理静态资源的中间件。
// 导入const express = require("express");// 创建应用对象const app = express();// 静态资源中间件设置app.use(express.static(__dirname + "/public"));// 创建路由app.get("/home", (req, res) => { res.send("前台首页"); });app.all("*", (req, res) => { res.send("404 no found");});app.listen(9000, () => { console.log("端口监听中...");});
注意事项:
- 1、index.html为文件默认打开的资源。
- 2、如果静态资源与路由规则同时匹配,谁先匹配谁就响应。
- 3、路由响应动态资源,静态资源中间件响应静态资源。
4、防盗链
通过请求头中的referer来判断。
// 导入const express = require("express");const bodyParser = require("body-parser");// 创建应用对象const app = express();// 声明中间件,防盗链app.use((req, res, next) => { // 检测请求头中的referer是否是127.0.0.1 let referer = req.get("referer"); console.log(referer); if (referer) { let url = new URL(referer); let hostname = url.hostname; if (hostname !== "127.0.0.1") { res.status(404).send("not found"); } } next();})app.listen(9000, () => { console.log("端口监听中...");});
5、路由模块化
创建routes文件夹,用来统一存放路由文件。
routes/homeRouter.js
// 导入const express = require("express");// 创建路由对象const router = express.Router();router.get("/home", (req, res) => { res.send("后台首页");});module.exports = router;
6、模板引擎EJS
分离用户界面和业务数据的一种技术。
EJS是一种高效的JS的模板引擎。
安装:npm i ejs --save
6.1、初体验
index.html
Document 我爱你 <%= china %>
<%= weather %>
index.js
const ejs = require("ejs");const fs = require("fs");let china = "中国";let weather = "天气晴";let str = fs.readFileSync("./index.html").toString();let result = ejs.render(str, {china, weather});console.log(result);
6.2、ejs列表渲染
const ejs = require("ejs");const fs = require("fs");let arr = [1,2,3,4,5];let result = ejs.render(` <% arr.forEach(item => { %> - <%= item %>
<% }) %>
`, { arr });console.log(result);
6.3、ejs的条件渲染
const ejs = require("ejs");const fs = require("fs");let isTrue = false;let result = ejs.render(` <% if (isTrue) { %> 主人 <% } else { %> 其他人 <% } %>`, { isTrue });console.log(result);
6.4、express中使用EJS
创建views文件夹,用于存放模板文件,后缀名是ejs。
views/home.ejs:
Document <%= title %>
index.js:
// 导入const express = require("express");const path = require("path");// 创建应用对象const app = express();// 1、设置模板引擎app.set("view engine", "ejs"); // 2、设置模板引擎文件存放位置app.set("views", path.resolve(__dirname, "./views"));// 创建路由app.get("/home", (req, res) => { let title = "你好"; res.render("home", {title});});app.all("*", (req, res) => { res.send("404 not found!
");});app.listen(9000, () => { console.log("端口监听中...");});
7、express-generator工具
通过应用生成工具express-generator可以快速创建一个应用的骨架,相当于脚手架。
可以通过npx(包含在Node.js8.2.0以及更高版本中)命令来运行Express应用程序生成器。
npx express-generator
对于较老版本的node,请通过npm将Express应用程序生成器安装到全局环境中使用:
npm install -g express-generator
express -e <项目名>,创建项目。
npm i 安装项目的依赖。
-h参数可以列出所有可用的命令行参数。
8、文件上传
使用formidable处理文件上传的请求。
npm i formidable
var express = require("express");var router = express.Router();// 导入const path = require("path");const formidable = require("formidable");/* GET home page. */router.get("/", function(req, res, next) { res.render("index", { title: "Express" });});// 显示网页的表单router.get("/portrait", (req, res) => { res.render("portrait");});// 处理文件上传router.post("/portrait", (req, res) => { const form = formidable({ multiples: true, // 设置文件的保存目录 uploadDir: path.resolve(__dirname, "../public/images"), // 保持文件后缀 keepExtensions: true, }); // 解析请求报文 form.parse(req, (err, fields, files) => { if (err) { // next(err); console.log(err); return; } console.log(fields); // text rdion checkbox select console.log(files); // file // 服务器保存该图片的访问URL let url = "/images/" + files.portrait.newFilename; // 将来将此数据保存在数据库中 res.send(url); });});module.exports = router;
关键词:
express框架的基本使用 环球新资讯
幺妹带你慢慢耍歌词完整版_请问老师们有谁知道幺妹带你慢慢耍歌词曲谱 这首歌确实不错好听
拒绝录用有文身员工 老板回应被威胁:看不惯年轻人必教育到底
滚动:《塞尔达传说:王国之泪》掉帧严重:任天堂Switch性能不够用了
排面!理想L7成卢森堡大使馆官方用车:“这是中国最棒的车”_关注
环球今日讯!预制半成品、来“料”加工、网上销售 普陀警方捣毁一伪造、买卖身份证件黑色产业链
论文、专利、文献检索及图像数据工具总结 时讯
工控老曹说——TSN标准化如何赋能多领域以太网新发展
焦点讯息:2023最佳python编辑器和IDE
git 常用指令-当前聚焦
今日精选:万家基金尹诚庸离任6只基金
iQOO首款降噪无线耳机来了:将与Neo8系列同步推出
悲惨的5G基站:你敢建?我就敢拆!
害怕失去灵魂?大众汽车:我们没使用华为车机软件|环球快讯
焦点热议:小黑旗舰升级13代酷睿!联想2023款ThinkPad X1 Carbon国内发布
世界快看点丨马斯克再度催生:再不生娃人类就要灭亡了
苏联题材科幻动作游戏《原子之心》Steam 史低促销
微服务圣经1:零基础搭建一套SpringCloud微服务脚手架(SpringCloud+Dubbo+Docker+Jenkins) 环球速递
低代码开发——进最热的赛道,啃最硬的骨头-视焦点讯
Python字符串替换的3种方法-播资讯
Django SQL注入漏洞复现 (CVE-2022-28347)
每日机构分析:5月18日
天天热资讯!斗罗大陆:为何唐三成为海神后,只赠予了吉祥一个神赐魂环,
我国本月将发射神舟十六号载人飞船:与神舟十五号乘组在轨交接-消息
【世界速看料】充电时 先插手机还是充电器?这几种方法都错了
正面挑战微软!谷歌宣布将推出AI写代码功能
来了!消息称RTX 4060 Ti今晚发布:NV定8/16GB版价格 或399美元
环球今头条!小米13旗舰主摄下放!小米Civi 3关键参数曝光:IMX800加持
陈张开展“进企业促发展”人大代表履职建功主题活动 焦点精选
九头蛇的安装与使用 世界热议
焦点热门:第二章:数据模型与查询语言
P1344 [USACO4.4] 追查坏牛奶 Pollutant Control (网络流)
MySQL 迁移至 SQLite 问题记录 全球通讯
全球今日报丨【新华500】新华500指数(989001)18日下跌0.14%
当前时讯:最高检发新文:NFT法律属性定调哪般?
天天日报丨黄桃+椰果!林家铺子双色水果罐头8罐仅19.9元
天天头条:比亚迪再掀桌子!新款汉DM-i冠军版上市:18.98万起合资还怎么玩
同事都说买高像素就对了 四款热门高像素全画幅相机推荐-天天百事通
微资讯!HTC U23 Pro发布:性价比这么低的手机不多了
世界热点评!日赚4亿还嫌多?移动联通电信现在和10年前日赚一样多:手机资费下降95%等
百度投资卡车整车研发商载合汽车科技_环球快讯
环球热点![MySQL 如何分析性能]
天天速递!Python从零到壹丨图像增强的顶帽运算和底帽运算
知识拷问:工作站和服务器哪个更适合做CST电磁仿真?|每日观察
今日讯!3万多买钻戒如今只值2000元 网友称还是黄金保值:你会买钻戒吗?
60Hz显示器配120帧显卡是浪费?答案意外_世界即时看
最新资讯:包含多家中国造车新势力!马斯克预言一年内必有车厂倒闭
360 AIGC产品定名360智脑、360鸿图
三星量产12nm DDR5内存:功耗骤降23% 全球新视野
追讨欠款的有效期限是多久?欠钱不还电话不接微信不回怎么办?
ChatGPT 插件,组合后更妙了
快报:零跑汽车在杭州成立动力系统公司,注册资本1亿元
地球母亲怎么了?世界气象组织警告:未来五年全球气温将创新高-热头条
全球最新:知名女演员最新大片引争议 网友惊呼:这花有毒!
用这些C#代码混淆器保护你的代码安全_速递
环球微头条丨港元1个月拆息升至近5个月高 报4.57238厘
215英寸口袋巨幕!雷鸟Air Plus发布:首发2299元
世界快消息!男子在路边花5600元买到战国青铜剑:捐赠给博物馆
《王者荣耀》安琪拉/亚瑟520限定皮肤公布 传说品质-每日聚焦
周星驰担任网飞版《美猴王》执行制作:定档8月18日 大圣外形被吐槽|世界速讯
《权力的游戏》演员称曾被网暴到退网:就因为角色不讨喜
5月18日河北中昌化肥硫酸铵价格动态
世界最资讯丨MongoDB + SpringBoot 的基础CRUD、聚合查询
开源即时通讯IM框架MobileIMSDK的Uniapp端开发快速入门
【世界独家】TimescaleDB VS TDengine:写入性能和查询性能是 TDengine 的 1/6、1/28
世界百事通!夜莺官方文档优化第一弹:手把手教你部署和架构讲解,消灭所有部署失败的 case!干!
直播预告 | 员工在公司体验感UP,原因竟然是这个......
美国债务上限谈判出现曙光 日元价格跌破年内新低
全球热点评!小米Civi 3首发天玑8200 Ultra!小米影像大脑更强了:连拍提速235%
报告称:81%员工不认为其工作可以被AI取代-天天热点
7450MB/s!三星990 Pro旗舰SSD价格腰斩:2TB只要1229元
每日时讯!发条朋友圈就能赚钱?支付宝辟谣:“朋友圈出租”是骗局
头条:魔兽国服关了114天 暴雪选择躺平:工作室脚本泛滥 玩家遭殃
国家金融监督管理总局官方微信公众号今日上线 世界讯息
《安富莱嵌入式周报》第312期:开源磁场照相机,仿生神经元PCB,开源无线耳机,手机系统PalmOS移植到各种单片机,开放系统组装协议OSAP 环球聚看点
今日精选:第141篇:微信小程序wx.request接口报错(errno: 600001, errMsg: "request:fail -2:net::ERR_
阿里云微服务引擎 MSE 全新升级,实用能力更普惠,最高降幅 75%
焦点信息:沉默的答案!直播源码禁言技术的实现
spring框架_常见工厂后处理器 最新资讯
预售价13.98-14.98万元 北京现代MUFASA定名沐飒 全球时讯
稻香村旗舰店:稻香私房粽子4只9.9元狂促(4粽4味)|今日快讯
天天百事通!Redmi Book 14轻薄本第三大升级公布:4000元档颜值绝了
一老年代步车当街起火:爷孙两人被严重烧伤
纯白YYDS!魅族20白色款3199元起开始预约:3年质保
女生遭两闺蜜PUA长达8年被骗百万 网友提醒:警惕“贬低式关系”
2023广州李荣浩演唱会需要预约吗?
全球热资讯!HTTP1.0、HTTP1.1、HTTP2.0 协议的特点
周杰伦好像被舞伴碰瓷 周杰伦表情一脸错愕(图)_环球时讯
环球关注:亚瑟首款传说皮肤 《王者荣耀》520皮肤今晚上架:打包250元 你买吗?
白嫖7万2!岚图追光四大选装包限时免费:入门即顶配_天天最资讯
对话不再“一次性”:BingChat新增聊天内容导出功能
一景区沙下埋20厘米三角钉 越野车轮胎被扎:官方通报调查结果 全球通讯
我国今年沙尘爆发原因找到了:蒙古国贡献超40% 冷锋、气旋天气主导
劳模登讲台 思政“活”起来
恶俗婚闹哪里最多_大家都见过哪些恶俗的婚闹-环球热门
全球新动态:Take-Two暗示《GTA6》明年问世
00后裸辞旅游被批 家里有矿吗:本人回应:享受当下 拒绝加班 焦点信息
3万元钻戒如今只值2千 越来越多新人告别智商税 婚礼用十几元道具戒指
热议:特斯拉花钱打广告 能加速马斯克上天吗?
华为手机麒麟新处理器曝光:搞定7nm工艺?