express框架和路由中获取数据

框架:是一整套解决方案,提供了项目开发中的常用功能,简化了已有的功能。

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,例如搜索

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值