框架:是一整套解决方案,提供了项目开发中的常用功能,简化了已有的功能。
Node.js中常见的框架:express koa egg
1.express框架
基于Node.js平台,快速、开放、极简的WEB开发框架
网址:www.expressjs.com.cn
属于第三方模块,需要先去下载安装
npm install express
(1)创建WEB服务器
const express=require('express'); //引入express第三方模块 const app=express();//创建WEB服务器 app.listen(8080); //设置端口 |
(2)路由
路由根据请求的方法和请求的URL作出特定的响应,是一个独立的方法
路由三要素:请求的方法、请求的URL、回调函数
res 响应的对象
res.send() 设置响应的内容并发送
res.redirect() 设置跳转的URL并发送
res.sendFile() 设置响应的文件并发送,文件必须使用绝对路径(__dirname)
req 请求的对象
req.url 获取请求的URL
req.method 获取请求的方法
req.query 获取get传递的数据(查询字符串),结果为对象
练习:编写文件03_express.js,使用express创建WEB服务器,添加路由(get /search),响应搜索的网页search.html
//html 代码
<h2>用户搜索</h2>
<!--
form: 表单标签,用于表单提交(向服务器发请求)
method: 设置请求的方法
action: 设置请求的URL
name: 起名字,保存用户输入的值
-->
<form method="get" action="/mysearch">
<input type="text" name="kw">
<input type="submit">
</form>
//JS代码
const express=require('express');
//引入查询字符串模块
const querystring=require('querystring');
//创建WEB服务器
const app=express();
//设置端口
app.listen(8080,()=>{
console.log('服务器启动成功');
});
app.get('/search',(req,res)=>{
res.sendFile(__dirname+'/search.html');
});
//添加对应的路由(get /mysearch),响应'搜索成功'
app.get('/mysearch',(req,res)=>{
//获取get传递的数据(格式为查询字符串)
console.log(req.query);
//获取请求的URL,获取请求的方法
//console.log(req.url, req.method);
res.send('搜索成功');
});
练习:根据表单的提交,添加对应的路由(get /mysearch),响应'搜索成功'
2.路由中获取数据
传递方式 | 格式 | 路由中获取,结果为对象 |
get传递 | http://127.0.0.1:8080/mysearch?kw=笔记本 | req.query {kw: '笔记本'} |
post传递 | URL中不可见(在http协议的请求主体) | req.on('data', (chunk)=>{ chunk获取的数据,转字符串后位查询字符串,需要解析为对象 querystring.parse( chunk.toString() ) }) {user: 'tao', password: '123456'} |
路由传参 | http://127.0.0.1:8080/package/mysql | 需要设置形参 app.get('/package/:pname',(req,res)=>{ req.params //获取路由传参的数据,格式为对象 }) {pname: 'mysql'} |
练习:添加路由(get /login),响应登录的网页login.html,点击提交向服务器发请求(get /mylogin),添加对应的路由,获取传递的数据,响应“登录成功,欢迎:xxx”
//html代码
<h2>用户登录</h2>
<form method="get" action="/mylogin">
用户<input type="text" name="user"><br>
密码<input type="text" name="password"><br>
<input type="submit">
</form>
//JS代码
const express=require('express');
//引入查询字符串模块
const querystring=require('querystring');
//创建WEB服务器
const app=express();
//设置端口
app.listen(8080,()=>{
console.log('服务器启动成功');
});
//路由(get /login),响应login.html
app.get('/login',(req,res)=>{
res.sendFile(__dirname+'/login.html');
});
//路由(get /mylogin),接收表单提交的请求
app.get('/mylogin',(req,res)=>{
//获取get传递的数据
console.log(req.query);
res.send('登录成功 欢迎:'+req.query.user);
});
练习:添加路由(get /login2),响应网页login2.html,点击提交,向服务器发请求(post /mylogin2),响应'登录成功'
观察数据的传递方式和之前的区别
//html代码
<h2>用户登录</h2>
<form method="post" action="/mylogin2">
用户<input type="text" name="user"><br>
密码<input type="text" name="password"><br>
<input type="submit">
</form>
//JS代码
const express=require('express');
//引入查询字符串模块
const querystring=require('querystring');
//创建WEB服务器
const app=express();
//设置端口
app.listen(8080,()=>{
console.log('服务器启动成功');
});
//路由(get /login2),响应login2.html
app.get('/login2',(req,res)=>{
res.sendFile(__dirname+'/login2.html');
});
//路由(post /mylogin2)
app.post('/mylogin2',(req,res)=>{
//post传递的数据以流的方式,分为多段,需要通过事件获取
//一旦有数据流入到内存,自动触发事件,通过回调函数获取
req.on('data',(chunk)=>{
//chunk就是获取的分段数据
console.log(chunk);
//转为字符串,格式为查询字符串
var str=chunk.toString();
console.log(str);
//借助查询字符串模块解析为对象
var obj=querystring.parse(str);
console.log(obj);
});
res.send('登录成功');
});
对比get和post的区别 get请求会被浏览器缓存,post不会被缓存,post安全度相对高 get请求传递的数据最大不超过8k,post请求传递的数据大小没有限制 get请求速度相对post比较快,在对数据安全要求不高的情况下会使用get,例如搜索 |