昆明移动端网站建设,酒店网站搜索引擎优化方案,自己服务器可以做网站,网站是怎么建立起来的学习视频#xff1a;尚硅谷2023版Node.js零基础视频教程#xff0c;nodejs新手到高手 文章目录 #x1f4da;express使用#x1f407;初体验#x1f407;express路由⭐️路由的使用⭐️获取请求参数⭐️获取路由参数#x1f525;练习#xff1a;根据路由参数响应歌手信息… 学习视频尚硅谷2023版Node.js零基础视频教程nodejs新手到高手 文章目录 express使用初体验express路由⭐️路由的使用⭐️获取请求参数⭐️获取路由参数练习根据路由参数响应歌手信息 express响应设置express中间件⭐️定义全局中间件⭐️定义路由中间件⭐️静态资源中间件静态资源中间件练习局域网内访问网页❓ 获取请求体数据 body-parserexpress防盗链防盗链实践 路由模块化Router介绍使用 EJS模板引擎介绍列表渲染条件渲染express中使用ejs 应用程序生成器express-generator express使用
初体验 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架官方网址简单来说express 是一个封装好的工具包封装了很多功能便于我们开发 WEB 应用HTTP 服务 express 本身是一个 npm 包所以可以通过 npm 安装 npm init
npm i express初体验 //1. 导入 express
const express require(express);
//2. 创建应用对象
const app express();
//3. 创建路由规则
app.get(/home, (req, res) {res.end(hello express server);
});
//4. 监听端口 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口监听为 3000...);
});express路由 官方定义 路由确定了应用程序如何响应客户端对特定端点的请求。 ⭐️路由的使用 一个路由的组成由请求方法 路径和回调函数组成。 express中提供了一系列方法使用路由使用格式如下app.method(path,callback) res.end和res.send的区别 //导入 express
const express require(express);
//创建应用对象
const app express();
//创建 get 路由
app.get(/home, (req, res) {res.send(网站首页);
});
//首页路由
app.get(/, (req,res) {res.send(我才是真正的首页);
});
//创建 post 路由
app.post(/login, (req, res) {res.send(登录成功);
});
//匹配所有的请求方法
app.all(/search, (req, res) {res.send(1 秒钟为您找到相关结果约 100,000,000 个);
});
//自定义 404 路由
app.all(*, (req, res) {res.send(h1404 Not Found/h1)
});
//监听端口 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口监听为 3000);
});以下是上述代码运行后直接输网址得到的返回。 针对login部分上边那得不到想要的是因为指定了post
⭐️获取请求参数
express 框架封装了一些 API 来方便获取请求报文中的数据并且兼容原生 HTTP 模块的获取方式。//导入 express
const express require(express);
//创建应用对象
const app express();
//获取请求的路由规则
app.get(/request, (req, res) {//1. 获取报文的方式与原生 HTTP 获取方式是兼容的console.log(req.method);console.log(req.url);console.log(req.httpVersion);console.log(req.headers);//2. express 独有的获取报文的方式//获取查询字符串console.log(req.query); // 『相对重要』//获取ipconsole.log(req.ip)// 获取指定的请求头console.log(req.get(host));res.send(请求报文的获取);
});
//启动服务
app.listen(3000, () {console.log(启动成功....)
})⭐️获取路由参数
路由参数指的是 URL 路径中的参数数据//导入 express
const express require(express);//创建应用对象
const app express();//创建路由
app.get(/:id.html, (req, res) {//获取 URL 路由参数res.send(商品详情, 商品 id 为 req.params.id);
});//监听端口, 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口 3000 正在监听中....)
})练习根据路由参数响应歌手信息
//导入 express
const express require(express);
//导入 json 文件中括号解构返回数组
const {singers} require(./singers.json);
//创建应用对象
const app express();//创建路由
app.get(/singer/:id.html, (req, res) {//获取路由参数let {id} req.params;//在数组中寻找对应 id 的数据let result singers.find(item {if(item.id Number(id)){return true;}});//判断if(!result){res.statusCode 404;res.send(h1404 Not Found/h1)return;}res.send(!DOCTYPE htmlhtml langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/title/headbodyh2${result.singer_name}/h2img src${result.singer_pic} //body/html);
});//监听端口, 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口 3000 正在监听中....)
})express响应设置 express 框架封装了一些 API 来方便给客户端响应数据并且兼容原生 HTTP 模块的获取方式 //获取请求的路由规则
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(中文响应不乱码);//设置响应体
//连贯操作
res.status(404).set(xxx,yyy).send(你好朋友)
//3. 其他响应
res.redirect(http://atguigu.com)//重定向
res.download(./package.json);//下载响应
res.json();//响应 JSON
res.sendFile(__dirname /home.html) //响应文件内容
});express中间件
中间件Middleware本质是一个回调函数。中间件函数可以像路由回调一样访问请求对象request和响应对象response。中间件的作用 就是 使用函数封装公共操作简化代码。类型全局中间件和路由中间件。
⭐️定义全局中间件 声明中间件函数 let recordMiddleware function(request,response,next){//实现功能代码//.....//执行next函数(当如果希望执行完中间件函数之后仍然继续执行路由中的回调函数必须调用next)next();
}应用中间件app.use(recordMiddleware); 声明时直接传递 app.use(function (request, response, next) {console.log(定义第一个中间件);next();
})express 允许使用 app.use() 定义多个全局中间件 app.use(function (request, response, next) {console.log(定义第一个中间件);next();
})
app.use(function (request, response, next) {console.log(定义第二个中间件);next();
})/*** 记录每个请求的 url 与 IP 地址*/
//导入 express
const express require(express);
const fs require(fs);
const path require(path);//创建应用对象
const app express();//声明中间件函数在这里就是起一个函数声明形成模板不用在每个app里写记录语句
//把公共代码放这里这样每次请求都能被记录
function recordMiddleware(req, res, next){//获取 url 和 iplet {url, ip} req;//将信息保存在文件中 access.logfs.appendFileSync(path.resolve(__dirname, ./access.log), ${url} ${ip}\r\n);//调用 next让它去调用后续的路由函数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(服务已经启动, 端口 3000 正在监听中....)
})⭐️定义路由中间件 如果只需要对某一些路由进行功能封装 则就需要路由中间件。 调用格式如下 app.get(/路径,中间件函数,(request,response){
});
app.get(/路径,中间件函数1,中间件函数2,(request,response){
});/*** 针对 /admin /setting 的请求, 要求 URL 携带 code521 参数, 如未携带提示『暗号错误』 *///导入 express
const express require(express);//创建应用对象
const app express();//创建路由
app.get(/home, (req, res) {res.send(前台首页);
});//声明中间件
let checkCodeMiddleware (req, res, next) {//判断 URL 中是否 code 参数等于 521if(req.query.code 521){// 满足条件就调用next();}else{res.send(暗号错误);}
}//后台
app.get(/admin, checkCodeMiddleware, (req, res) {res.send(后台首页);
});//后台设置
app.get(/setting, checkCodeMiddleware, (req, res) {res.send(设置页面);
});app.all(*,(req, res) {res.send(h1404 Not Found/h1)
})//监听端口, 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口 3000 正在监听中....)
})⭐️静态资源中间件 express 内置处理静态资源css图片等的中间件 //引入express框架
const express require(express);
//创建服务对象
const app express();
//静态资源中间件的设置将当前文件夹下的public目录作为网站的根目录
app.use(express.static(./public)); //当然这个目录中都是一些静态资源
//如果访问的内容经常变化还是需要设置路由
//但是在这里有一个问题如果public目录下有index.html文件单独也有index.html的路由
//则谁书写在前优先执行谁
app.get(/index.html,(request,response){respsonse.send(首页);
});
//监听端口
app.listen(3000,(){console.log(3000 端口启动....);
});//导入 express
const express require(express);//创建应用对象
const app express();//创建路由
app.get(/, (req, res) {res.send(我才是首页~~~);
});//静态资源中间件设置
app.use(express.static(__dirname /public));//监听端口, 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口 3000 正在监听中....)
})静态资源中间件练习局域网内访问网页❓ 喵喵大王立大功 首先npm init其次npm i express创建server.jsconst express require(express);
const app express();// 设置静态资源中间件
app.use(express.static(__dirname /todolist));app.listen(3000,() {console.log(服务已经启动端口3000正在监听中......)
})node .\server.js 查看ip地址cmd ——ipconfig可实现局域网内访问喵喵大王立大功的网页呜三个舍友只有一个可以呜呜 解决办法ISS管理界面修改 获取请求体数据 body-parser 第一步安装 npm i body-parser第二步导入 body-parser 包 const bodyParser require(body-parser);第三步获取中间件函数 //处理 querystring 格式的请求体
let urlParser bodyParser.urlencoded({extended:false}));
//处理 JSON 格式的请求体
let jsonParser bodyParser.json();第四步设置路由中间件然后使用 request.body 来获取请求体数据 app.post(/login, urlParser, (request,response){//获取请求体数据//console.log(request.body);//用户名console.log(request.body.username);//密码console.log(request.body.userpass);response.send(获取请求体数据);
});应用记得先装包
/*** 按照要求搭建 HTTP 服务* * GET /login 显示表单网页* POST /login 获取表单中的『用户名』和『密码』*/
//导入 express
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(表单页面)//响应 HTML 文件内容res.sendFile(__dirname /11_form.html);
});//post 规则
app.post(/login, urlencodedParser, (req, res) {//获取 用户名 和 密码console.log(req.body);res.send(获取用户的数据)
});//启动服务
app.listen(3000, () {console.log(server is running...);
})express防盗链 不允许外部网页调用图片。
防盗链实践
关键关注referer请求头。功能只允许127.0.0.1访问//导入 express
const express require(express);//创建应用对象
const app express();//声明中间件
app.use((req, res, next) {//检测请求头中的 referer 是否为 127.0.0.1//获取 refererlet referer req.get(referer);if(referer){//实例化let url new URL(referer);//获取 hostnamelet hostname url.hostname;//判断if(hostname ! 127.0.0.1){//响应 404 res.status(404).send(h1404 Not Found/h1);return;}}next();
});//静态资源中间件设置
app.use(express.static(__dirname /public));//监听端口, 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口 3000 正在监听中....)
})路由模块化Router
介绍
express 中的 Router 是一个完整的中间件和路由系统可以看做是一个小型的 app 对象。Router 作用对路由进行模块化更好的管理路由。主文件代码量减少管理更方便就类似cssjs外部分离。
使用
创建独立的js文件homeRouter.js//1. 导入 express
const express require(express);
//2. 创建路由器对象
const router express.Router();
//3. 在 router 对象身上添加路由
router.get(/, (req, res) {
res.send(首页);
})
router.get(/cart, (req, res) {
res.send(购物车);
});
//4. 暴露
module.exports router;主文件const express require(express);
const app express();
//5.引入子路由文件
const homeRouter require(./routes/homeRouter);
//6.设置和使用中间件
app.use(homeRouter);
app.listen(3000,(){console.log(3000 端口启动....);
})EJS模板引擎
介绍
模板引擎是分离用户界面和业务数据的一种通用型技术但现在用的没那么多了。EJS 是一个高效的 Javascript 的模板引擎官网中文站下载安装npm i ejs --save示例//1.引入ejs
const ejs require(ejs);
//2.定义数据
let person [张三,李四,王二麻子];
//3.ejs解析模板返回结构
//% % 是ejs解析内容的标记作用是输出当前表达式的执行结构
let html ejs.render(‘% person.join(,) %’, {person:person});
//4.输出结果
console.log(html);执行js代码% code %输出转义的数据到模板上% code %输出非转义的数据到模板上%- code %
列表渲染
//原生 JS
let str ul;
xiyou.forEach(item {str li${item}/li;
})
//闭合 ul
str /ul;
console.log(str);ul% xiyou.forEach(item { %li% item %/li% }) %
/ul条件渲染
// 原生 JS
if(isLogin){console.log(span欢迎回来/span)
}else{console.log(button登录/button button注册/button);
}% if(isLogin){ %
span欢迎回来/span
% }else{ %
button登录/button button注册/button
% } %express中使用ejs
//导入 express
const express require(express);
//导入 path
const path require(path);
//创建应用对象
const app express();
//1. 设置模板引擎
app.set(view engine, ejs);// pug twing
//2. 设置模板文件存放位置 模板文件: 具有模板语法内容的文件
app.set(views, path.resolve(__dirname, ./views));//创建路由
app.get(/home, (req, res) {//3. render 响应// res.render(模板的文件名, 数据);//声明变量let title 尚硅谷 - 让天下没有难学的技术;res.render(home, {title});//4. 创建模板文件
});//监听端口, 启动服务
app.listen(3000, () {console.log(服务已经启动, 端口 3000 正在监听中....)
})应用程序生成器express-generator
可以快速创建一个应用的骨架首先全局安装npm install -g express-generator创建骨架express -e 文件夹 然后需要安装依赖npm i运行npm start 该有都有补充什么在对应内容添加即可。