about route of express frame work
express框架中的路由
下载安装比较简单,在CMD输入命令。
npm install express
开始写做项目,写代码的时候,首先要创建WEB服务器,以下是以端口8080为例创建一个服务器,用多位数创建服务器有可能消失。
//引入express第三方模块
const express = require('express');
//console.log(express);//打印检测express,成功引用express的话会在CMD显示出很多api,如下图
//创建WEB服务器
const app = express();
//设置端口
app.listen(8080, ()=>{
console.log('server on success');//说明启动服务器成功
});

添加路由,当初我不明白为什么不使用链接,而当时也查过,是会经由框架路由统一处理这种跳转,而且方便后期维护。
路由,根据请求的URL和请求的方法来作出特定的响应
包含三部分:请求的URL、请求的方法、回调函数。
缓存,成功发送 '学子商城首页' 这个资源后,缓存会存一份,后面还用同一样的资源会从缓存拿,减轻服务器负担,提高性能
//添加路由
//请求的URL:/index 请求的方法:get
//回调函数(req,res),也可写成(a,b),但往下的代码要对应使用,即req/a, res/b
app.get('/index',(req,res)=>{//req-request,请求。res-respond,响应,反映出
//设置响应的内容并发送
res.send('
学子商城首页
');});
//添加商品列表的路由
//请求的URL:/list 请求的方法: get
//响应
这是商品列表
,app.get('/list',(req,res)=>{
res.send(
<h2>这是商品列表</h2> 商品介绍 );});
req请求对象,req请求对象还有如下如用法
req.url 获取请求的URL
req.method 获取请求的方法
req.query 获取get传递的数据,格式为对象
//添加路由
//请求的方法:get 请求的URL:/
app.get('/',(req,res)=>{
//跳转到 /index
//设置响应的重定向并发送
res.redirect('/index');
});
//练习:添加路由
//请求的方法:get 请求的URL:/study
//跳转到 https://www.tmooc.cn
app.get('/study',(req,res)=>{
res.redirect('https://www.tmooc.cn');
});
//路由:get /reg
//响应文件reg.html
app.get('/reg',(req,res)=>{
res.sendFile(__dirname + '/reg.html');
});
/获取绝对路径,即__dirname,原先使用C盘的路径,但服务器没有C盘,
C:\xampp\htdocs\WEB2105\NODEJS/day04 ,此处/和\都可以正常使用/
console.log(__dirname);
--------另一代码2----------
//引入express
const express = require('express');
//引入查询字符串模块
const querystring = require('querystring');
//创建WEB服务器
const app = express();
//设置端口
app.listen(8080);
//路由(get /search)
//响应search.html
app.get('/search',(req,res)=>{
res.sendFile(__dirname + '/search.html');
});
//响应提交
//get /mysearch
app.get('/mysearch',(req,res)=>{
//req请求的对象
//获取请求的URL,获取请求的方法
//console.log(req.url,req.method);
//获取传递的数据
console.log(req.query);
res.send('搜索成功,您搜索的关键字:' + req.query.kw);
});
//路由(get /login):响应登录的网页
app.get('/login',(req,res)=>{
res.sendFile(__dirname+'/login.html');
});
//添加路由(post /mylogin),响应提交按钮
/post方式传递数据,需要经由表单提交数据,在http协议的请求主体,即,在前一网页(html)录入了数据,
在html中按下submit(表单),需要经由系统传递,直接输入URL(/mylogin)并不能发送请求/
app.post('/mylogin',(req,res)=>{
//获取post传递的数据
//流的方式,通过事件获取
req.on('data',(chunk)=>{
//数据格式为buffer,转换为字符串后位查询字符串
console.log(chunk.toString());
//将查询字符串解析为对象
let obj = querystring.parse( chunk.toString() );
console.log(obj);
res.send('登录成功,欢迎:'+obj.uname);
});
});
关于post的html代码页面

如下图,post方式传递数据,需要经由表单提交数据,在http协议的请求主体,即,在前一网页(html)录入了数据,在html中按下submit(表单),需要经由系统传递,直接输入URL(/mylogin)并不能发送请求。使用post方式传递能让数据更安全一些。

如下图,post可以大文件上传,要用流,流要通过事件获取

接代码2,转换成字符串,生成
//路由(get /reg) 响应register.html
app.get('/reg',(req,res)=>{
res.sendFile(__dirname + '/register.html');
});
//添加路由(post /myreg),响应按钮的提交
app.post('/myreg',(req,res)=>{
//获取post请求的数据
req.on('data',(chunk)=>{
//查询字符串
let str = chunk.toString();
//console.log(str);
//解析为对象
/*查询字符串模块(querystring)
查询字符串:浏览器向WEB服务器发请求,传递的数据的一种方式,位于浏览器的地址栏中。
查询字符串模块用于操作查询字符串的工具
parse() 将查询字符串解析为对象
*/
let obj = querystring.parse(str);
console.log(obj);
res.send( 注册成功<br> 用户:${obj.uname}<br>//模版字符串 邮箱:${obj.email}<br>//模版字符串 手机:${obj.phone}<br>//模版字符串 );
});
});
路由传参
//--------------------------------------
//路由传参
//路由:查看包的详情
//get /package
app.get('/package/:pname',(req,res)=>{
//获取路由传参的数据
console.log(req.params);
res.send('这是包的详情介绍'+req.params.pname);
});
//练习:添加到购物车路由(get /shopping),传递商品的编号lid和数量num,最终响应以下格式
app.get('/shopping/:lid&:num',(req,res)=>{
console.log(req.params);
res.send( 商品的编号:${req.params.lid}<br> 购买的数量:${req.params.num} );
});
服务器先接收到请求

加上以下两代码就会显示出相应字符串
${req.params.lid}
${req.params.num}

区分路由,要给路由添加统一前缀,不然挂载到总路由使用的时候会引起混乱
路由器
const r = express.Router();//创建路由器对象
//往路由器下添加路由
module.exports = r; //导出路由器对象
---分割线---
//挂载示例
//挂载路由器到WEB服务器
//添加前缀/product
app.use('/product',productRouter);

浙公网安备 33010602011771号