05 路由和GET、POST传值

路由和GET、POST传值

什么是路由

浏览器和web服务器之间的交互是通过HTTP协议,呈现给用户的网页一般是一个html文件,针对浏览器发出的不同请求,服务器返回不同的html文件。那么服务器怎么知道浏览器请求的是哪个html文件呢?

答案就是路由。路由是由url(路径)和请求方法组成的,用于服务器处理浏览器发出的请求并返回对应的数据。nodejs中可以利用url模块来获取当前浏览器访问的pathname,根据自定义的关系返回数据,比如浏览器访问http://www.baidu.com/login此时的pathname/login,那么就返回login.html,如果pathname/register,那么就返回register.html。根据pathname返回对应的数据的操作就是路由。

这里以返回文字为例演示nodejs对路由的操作。

//路由演示程序,请手动输入以下url
// http://127.0.0.1:9999/login
// http://127.0.0.1:9999/register
// http://127.0.0.1:9999/loginout
let http = require("http");
let url = require("url");
let app = http.createServer((req, res) => {
  let urlinfo = url.parse(req.url, true);
  let pathname = urlinfo.pathname;
  console.log("当前请求的路由是:", pathname);
  let file = "";
  if (pathname == "/favicon.ico") return;//如果是icon请求则不处理。
  switch (pathname) {
    case "/login":
      file = "i am login.html"
      break;
    case "/register":
      file = "i am register.html"
      break;
    case "/loginout":
      file = "i am logiout.html"
      break;
    case "/":
      file = "路由演示程序,请手动输入以下url: http://127.0.0.1:9999/login或者http://127.0.0.1:9999/register或者http://127.0.0.1:9999/loginout";
      break;
    default:
      file = "请输入正确的路径";
      break;
  }
  // let getValue = urlinfo.query;
  // console.log("获取到的get值是:", getValue);
  res.writeHead(200, { "Content-Type": "text/html;charset=UTF-8" })
  res.write(file);
  res.end();
})
app.listen(9999, "127.0.0.1")
console.log("路由演示服务器监听在 127.0.0.1:9999")

访问 http://127.0.0.1:9999/login

C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191210195745696.png
访问 http://127.0.0.1:9999/register
在这里插入图片描述

nodejs获取浏览器传值

HTTP协议中是浏览器与服务器之间通信的标准协议,通信过程中最常用的两个方法是:GET和POST方法。

  • GET :一般用于从服务器拿数据,请求数据在URL中,是明文,不安全。
  • POST :一般用于向服务器提交数据,请求数据不在url中,相对安全。

拿到GET传值

nodejs取get方法传值的方法是用前面介绍到的url模块,url模块的parse方法能将一个请求分门别类的解析成一个对象,具体如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vcg7Xyt5-1575981456902)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191210192352223.png)]

简单的server程序如下:

//获取get传值演示程序,请手动输入以下url
// http://127.0.0.1:9999/login?user="abc"&psd="123"
let http = require("http");
let url = require("url");
let app = http.createServer((req, res) => {
  let urlinfo = url.parse(req.url, true);
  let pathname = urlinfo.pathname;
  console.log("当前请求的路由是:", pathname);
  let data = "";
  if (pathname == "/favicon.ico") return;//如果是icon请求则不处理。
  switch (pathname) {
    case "/":
      data = "请输入 http://127.0.0.1:9999/login?user='abc'&psd='123'"
      break;
    case "/login":
      let queryValue = urlinfo.query;
      console.log("get拿到的值是:", queryValue);
      data = `请在后台命令行查看拿到的值get值`;
      break;
    default: //如果是
      data = "请输入正确的路径";
      break;
  }
  // let getValue = urlinfo.query;
  // console.log("获取到的get值是:", getValue);
  res.writeHead(200, { "Content-Type": "text/html;charset=UTF-8" })
  res.write(data);
  res.end();
})
app.listen(9999, "127.0.0.1")
console.log("GET取值演示服务器监听在 127.0.0.1:9999")

C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191210201833442.png

拿到POST传值

因为post传值并不像get那样是在请求路径上显式传递,而是放在请求数据中,所以要拿到post传值就要比get稍微麻烦一些。

一般post传值的获取方式是通过http模块creatServer函数中回调函数的req参数的事件监听方法获取的(有点绕,具体看程序)。

另外补充一点req参数的method属性能得到对当前url的请求方法是get还是post。

看一个拿到post传值的例子(post传值利用postman软件来实现)。

//获取post传值演示程序,利用postman软件像本程序发送post请求
// http://127.0.0.1:9999/login?user="abc"&psd="123"
let http = require("http");
let url = require("url");
let app = http.createServer((req, res) => {
  if (req.method.toLowerCase() == "post") {
    console.log("这是一个post请求");
    let postData = "";
    //监听post数据
    req.on("data", (dataChunk) => {
      postData += dataChunk;//分块接受post数据(如果数据小一次就能接受完成)
    })
    req.on("end", () => {
      console.log("接受到post数据为:", postData);
      res.writeHead(200, { "Content-Type": "text/html;charset=UTF-8" })
      res.write("成功取得post数据");
      res.end();
    })
  }
})
app.listen(9999, "127.0.0.1")
console.log("POST取值演示服务器监听在 127.0.0.1:9999")

在这里插入图片描述
C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191210203706946.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前端应用路由是一个非常重要的概念,它决定了应用的不同页面之间的跳转和展示。在路由之间传递数据是非常常见的需求,一般有以下两种方式: 1. URL参数传值 URL 参数传值是最常见的一种传值方式,它的原理是将数据以 URL 参数的形式传递给下一个路由。例如,在一个商品列表页面,你可以通过点击某个商品的链接,传递该商品的 id 给商品详情页。代码示例: ```javascript // 列表页 const productId = 123; router.push(`/product/${productId}`); // 详情页 const productId = this.$route.params.id; ``` 在列表页,我们将商品的 id 作为参数传递给详情页的路由,详情页可以通过 `$route.params` 获取该参数。 2. 状态管理器传值 状态管理器传值是另一种传值方式,它的原理是将数据存储在一个全局的状态管理器,不同的页面之间可以通过该状态管理器共享数据。例如,在一个购物车页面,你可以将购物车的商品列表存储在状态管理器,然后在结算页面读取该列表。代码示例: ```javascript // 存储数据 store.commit('setCartList', cartList); // 读取数据 const cartList = store.state.cartList; ``` 在上面的代码,我们使用 Vuex 状态管理器存储了购物车商品列表,然后在其他页面可以通过 `store.state` 读取该列表。需要注意的是,使用状态管理器传值需要安装和配置相应的状态管理库,如 Vuex。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值