利用node实现get请求数据读写、处理post请求参数以及使用

2022-03-08  本文已影响0人  听书先生

一般node中去获取拼接在url的get参数,需要利用node的内置模块中的queryString以及url这两个内置模块。

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

http.createServer((req, res) => {
   /**
    * get 请求的数据, 是通过url路径传递过来的
    * 通过 url.parse 等方法来解析  url路径 获取get请求的数据
    */
   console.log(req.url);
   let { query } = url.parse(req.url, false);
   console.log(fs.parse(query));
   res.end('test')
}).listen(3000, () => console.log('Server port at  3000 start ....'))
图1.png

接着,我们可以在目录下npm init -y初始化一个package.json依赖内容文件出来
然后终端中安装这两个包npm install finalhandler serve-static
为了方便测试,我们在public下创建两个模板文件:

图2.png
需要注意的是:在使用静态资源目录,要把静态资源处理放到最后,防止前面进行通配。
const http = require('http');
const url = require('url');
const fs = require('querystring');

// 引入处理静态资源的包
const serveStatic = require('serve-static');

const finalHandler = require('finalhandler');

// 定义静态资源目录
let serve = serveStatic('public', { 'index': ['index.html', 'index.htm']})

http.createServer((req, res) => {
   /**
    * get 请求的数据, 是通过url路径传递过来的
    * 通过 url.parse 等方法来解析  url路径 获取get请求的数据
    */
   console.log(req.url);
   let { query } = url.parse(req.url, false);
   console.log(fs.parse(query));

   // 使用静态资源目录,要把静态资源处理,放到最后
   // 防止前面进行通配
   serve(req, res, finalHandler(req, res));


}).listen(3000, () => console.log('Server port at  3000 start ....'))
图3.png

这样可以发现,类似apache的路径映射就实现了,没有该路径会找不到对应的模块。

const http = require('http');
const url = require('url');
const qs = require('querystring');
const fs = require('fs');

// 引入处理静态资源的包
const serveStatic = require('serve-static');

const finalHandler = require('finalhandler');

// 定义静态资源目录
let serve = serveStatic('public', { 'index': ['index.html', 'index.htm']})

http.createServer((req, res) => {
   /**
    * get 请求的数据, 是通过url路径传递过来的
    * 通过 url.parse 等方法来解析  url路径 获取get请求的数据
    */
   console.log(req.url);
   let { query, pathname } = url.parse(req.url, true);
   res.setHeader('Content-Type', 'text/html;charset=utf8')
   // 1. 匹配路由
   if (pathname === '/getStudent') {
      res.end('get')
   } else if (pathname === '/addStudent') {
      // 如果匹配到的是添加学生信息,那么分三步完成:
      // 1、获取get路径上的参数信息(也就是学生数据)并重新调整格式
      const stu_info = `
         学号: ${query.no} \n
         姓名: ${query.name} \n
         年龄: ${query.age} \n
         学校: ${query.school} \n
      `
      console.log(stu_info)
      // 2.对录入信息后 文件的路径进行拼接
      const filePath = `./public/student_db/${query.no}.txt`;
      
      // 3.调用fs内置模块进行数据的写入
      fs.writeFile(filePath, stu_info, (error, data) => {
         if (error) {
            res.end('数据录入失败...');
         } else {
            res.end('数据录入成功...')
         } 
         
      })
   } else {
      // 使用静态资源目录,要把静态资源处理,放到最后
      // 防止前面进行通配
      serve(req, res, finalHandler(req, res));
   }
}).listen(3000, () => console.log('Server port at  3000 start ....'))
图4.png
const http = require('http');
const url = require('url');
const qs = require('querystring');
const fs = require('fs');

// 引入处理静态资源的包
const serveStatic = require('serve-static');

const finalHandler = require('finalhandler');

// 定义静态资源目录
let serve = serveStatic('public', { 'index': ['index.html', 'index.htm']})

http.createServer((req, res) => {
   /**
    * get 请求的数据, 是通过url路径传递过来的
    * 通过 url.parse 等方法来解析  url路径 获取get请求的数据
    */
   console.log(req.url);
   let { query, pathname } = url.parse(req.url, true);
   res.setHeader('Content-Type', 'text/html;charset=utf8')
   // 1. 匹配路由
   if (pathname === '/getStudent') {

      const filePath = `./public/student_db/${query.no}.txt`;

      fs.readFile(filePath, (error, data) => {
         if (error) {
            res.end('数据查询失败...');
         } else {
            res.end(data.toString());
         }
      })
   } else if (pathname === '/addStudent') {
      // 如果匹配到的是添加学生信息,那么分三步完成:
      // 1、获取get路径上的参数信息(也就是学生数据)并重新调整格式
      const stu_info = `
         学号: ${query.no} \n
         姓名: ${query.name} \n
         年龄: ${query.age} \n
         学校: ${query.school} \n
      `
      console.log(stu_info)
      // 2.对录入信息后 文件的路径进行拼接
      const filePath = `./public/student_db/${query.no}.txt`;
      
      // 3.调用fs内置模块进行数据的写入
      fs.writeFile(filePath, stu_info, (error, data) => {
         if (error) {
            res.end('数据录入失败...');
         } else {
            res.end('数据录入成功...')
         } 
         
      })
   } else {
      // 使用静态资源目录,要把静态资源处理,放到最后
      // 防止前面进行通配
      serve(req, res, finalHandler(req, res));
   }
}).listen(3000, () => console.log('Server port at  3000 start ....'))
图5.png
http.createServer((req, res) => {
   let info = '';
   req.on('data', (chunk) => {
      info += chunk;
   });

   req.on('end', () => {
      console.log('info: ', info);
   })
}).listen(3000, () => console.log('Server port at 3000 start ....'))
上一篇 下一篇

猜你喜欢

热点阅读