Node-轻松获取get | post参数

311 阅读2分钟

1.get参数处理

我会在代码中进行注解,那么直接来看看代码

const url = require('url');

// root:123456表示在有一些服务器访问的时候需要账号和密码, : 前面的就是账号, : 后面的就是密码 (了解)
// :666表示端口号
// /user/1222312662937800/posts表示请求地址
// ?name=sandy&age=21表示参数
// #sandy表示哈希值
let str = 'https://root:123456@juejin.cn:666/user/1222312662937800/posts?name=sandy&age=21#sandy'
// 首先先要把str转为对象来打印一下
let obj = url.parse(str);
console.log(obj);

想拿参数是不是就拿到对象里的里的query就可以了,但是这里面是不是有个&,这个怎么解决

可以在字符串转对象的时候,url.parse还可以再传一个参数,传一个true,它就会把这个query转为对象

const url = require('url');

let str = 'https://root:123456@juejin.cn:666/user/1222312662937800/posts?name=sandy&age=21#sandy';
let obj = url.parse(str, true);
console.log(obj);

这样是不是就方便是不是就可以通过

obj.query.name
obj.query.age

拿到我们想要的参数了

来打印试一下

const url = require('url');

let str = 'https://root:123456@juejin.cn:666/user/1222312662937800/posts?name=sandy&age=21#sandy';
let obj = url.parse(str, true);
console.log(obj.query.name);
console.log(obj.query.age);

那是不是就拿到了我们想要的参数了

那下面在本地搭建的服务区来试一下

const url = require('url');
const http = require('http');

let server = http.createServer();
server.on('request', (req, res) => {
  let obj = url.parse(req.url, true);
  res.end(obj.query.name + '----' + obj.query.age);
}).listen(666);

2.post参数处理

在Node中,想要获取post的参数需要导入

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="post">
  <label>
    <input type="text" name="userName">
    <input type="text" name="passWord">
    <input type="submit" value="提交">
  </label>
</form>
</body>
</html>
const http = require('http');
const querystring = require('querystring');

let server = http.createServer();
server.on('request', (req, res) => {
  // 1.定义变量保存传递过来的参数
  let params = '';
  // 注意点: 在Node中,post请求的参数我们不能一次性获取完,必须分批获取
  req.on('data', (data) => {
    params += data;
  });
  req.on('end', () => {
    let obj = querystring.parse(params);
    console.log(obj);
  })
}).listen(666);

这样是不是就可以拿到post传递的参数

为了方便观察,我再改造一下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="post">
  <label>
    <input type="text" name="userName">
    <input type="text" name="passWord">
    <input type="submit" value="提交">
  </label>
</form>
</body>
</html>
const http = require('http');
const querystring = require('querystring');

let server = http.createServer();
server.on('request', (req, res) => {
  // 1.定义变量保存传递过来的参数
  let params = '';
  // 注意点: 在Node中,post请求的参数我们不能一次性获取完,必须分批获取
  req.on('data', (data) => {
    params += data;
  });
  req.on('end', () => {
    let obj = querystring.parse(params);
    res.end(obj.userName + '---' + obj.passWord);
  })
}).listen(666);

3.获取请求类型

通过req.method就可以获取请求类型

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="get | post">
  <label>
    <input type="text" name="userName">
    <input type="text" name="passWord">
    <input type="submit" value="提交">
  </label>
</form>
</body>
</html>
const http = require('http');

let server = http.createServer();
server.on('request', (req, res) => {
  console.log(req.method);
}).listen(666);

那么是不是可以判断如果是get请求,就用get方式来处理参数,如果是post就用post方式来处理参数

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:666/index.html" method="get">
  <label>
    <input type="text" name="userName">
    <input type="text" name="passWord">
    <input type="submit" value="提交">
  </label>
</form>
</body>
</html>
const http = require('http');
const url = require('url');
const querystring = require('querystring');
let server = http.createServer();
server.on('request', (req, res) => {
  res.writeHead(200, {
    "Content-Type": "text/plain; charset=utf-8"
  });
  if (req.method.toLowerCase() === 'get') {
    let obj = url.parse(req.url, true);
    res.write('通过get方法获取参数')
    res.end(obj.query.userName + '----' + obj.query.passWord);
  } else if (req.method.toLowerCase() === 'post') {
    let params = '';
    req.on('data', (data) => {
      params += data;
    });
    req.on('end', () => {
      let obj = querystring.parse(params);
      res.write('通过post方法获取参数')
      res.end(obj.userName + '---' + obj.passWord);
    })
  }
}).listen(666);