node-05-基于表单的get-post

简介: 因为系统不同 Mac和 windows路径不同, 因为路径报错的话,自己看下报错,转换成自己的路径就行了

1.前言


因为系统不同 Mac和 windows路径不同, 因为路径报错的话,自己看下报错,转换成自己的路径就行了


__dirname 当前文件的路径 模块级的全局对象
***


2.get


客户端html


<form action="http://127.0.0.1:7888"  method="get">
        <input type="text" placeholder="用户名" name="username">
        <input type="text" placeholder="密码" name="password">
        <input type="submit" value="登录">
    </form>
服务端 js


const http = require('http');
const url = require('url');
const fs = require('fs');
let server = http.createServer(function (req,res) {
    res.writeHead(200, { "content-type":"text/html;charset=utf-8"})
//    解析请求地址 得到地址对象
    let urlObj = url.parse(req.url, true)
    // 获取对象的pathname属性 路由
    let pathname = urlObj.pathname
    if (pathname === "/") {
        // 表单
        // 获取前端传过来的参数
        let un = urlObj.query.username;
        let pw = urlObj.query.password;
            // console.log(un ,pw)
        res.write("用户名:" + un);
        res.write("密码:" + pw);
        res.end();
    } else if (pathname === "/favicon.ico") {
        // 图标
        // res.end()
        // 返回静态资源 需要借助fs模块
        //  小文件 原理 一口气读完 参数有个回调读完才会调用
        // fs.readFile()
        // ***1. 读取静态资源
        // 大文件 读入流 读一部分存一部分内存里
        let readS = fs.createReadStream("favicon.ico")
        //****2. 通过管道方法将数据传递给res对象
        readS.pipe(res);
// 不需要写end  分段读取的不知道啥时候读完 自己内部肯定写了
    } else {
        res.end()
        // 其他请求
    }
});
server.listen(7888,function(){
    console.log("7888 服务启动");
})



3.post


客户端html


<form action="http://127.0.0.1:8989" method="post">
         <input type="text" placeholder="用户名" name="username">
         <input type="text" placeholder="密码" name="password">
         <input type="submit" value="登录">
    </form>
服务端js

如何通过req对象获取post请求的数据:

node在获取post过来的数据时是分次分段获取

主要是数据监听


const http = require("http");
const fs = require('fs');
const qs = require("querystring");
let server = http.createServer(function (req, res) {
    res.writeHead(200, {"content-type": "text/html;charset=utf8" })
    if (req.method == "GET") {
        // 图标
        let readS =  fs.createReadStream('favicon.ico')
        readS.pipe(res)
    } else if (req.method == "POST") {
        // 表单
        let allData = "";
        // 监听数据传递事件 ,并拼接数据
//注意这里的 data 和end事件是固定的
        req.on("data", function (chunk) {
            // 拼接数据
            allData +=chunk;
        });
        // 监听数据处理完毕.并处理数据
        req.on("end", function () {
            let qsObj = qs.parse(allData);
            res.write("用户名是:" + qsObj.username);
            res.write("密码是:" +qsObj.password);
            console.log( qsObj);
            res.end();
        })
    } else { 
        res.end()
    }
});
server.listen(8989,function(){
    console.log("8989 服务启动");
})



4 附送个综合练习吧 提升下对 css JS的理解


link script img标签 href src属性赋值的时候也会发起请求

客户端html


<fieldset>
            <legend>表单1-get</legend>
            <form action="http://127.0.0.1:7788/form1" method="GET">
                <input type="text" placeholder="名字" name="username">
                <input type="text" placeholder="密码" name="password">
                <input type="submit">
            </form>
        </fieldset>
        <fieldset>
            <legend>表单2-get 模拟 css标签</legend>
            <form action="http://127.0.0.1:7788/form2" method="GET">
                <input type="submit">
            </form>
        </fieldset>
        <fieldset>
            <legend>表单3-post</legend>
            <form action="http://127.0.0.1:7788/form3" method="POST ">
                <input type="text" placeholder="名字" name="username">
                <input type="text" placeholder="密码" name="password">
                <input type="submit">
            </form>
        </fieldset>
        <fieldset>
            <legend>表单4-请求图片 img</legend>
            <form action="http://127.0.0.1:7788/form4" method="GET">
                <input type="submit">
            </form>
        </fieldset>
服务端js


const http = require('http')
const fs = require('fs')
const url = require('url')
http
.createServer(function (req, res) {
    res.writeHead(200, { 'content-type': 'text/html;charset=utf-8' })
  let urlObj = url.parse(req.url,true)
  // console.log("-----",urlObj.query)
    let pathname = urlObj.pathname
    //    类型区分
    if (req.method === 'GET') {
      // get
      // 通过路由区分
      switch (pathname) {
        case '/form1': {
          res.write('名字是:' + urlObj.query.username)
          res.write('密码是:' + urlObj.query.password)
          res.end()
          break
        }
        case '/form2': {
              res.write("<link rel='stylesheet' href='http://127.0.0.1:7788/css' />");
              res.end()
          break
        }
        case '/form4': {
              res.write("<img src='http://127.0.0.1:7788/img' /><img src='http://127.0.0.1:7788/img' />");
              res.end();
              break;
        }
        case '/favicon.ico': {
          let readS = fs.createReadStream('favicon.ico')
          // 2. 通过管道方法将数据传递给res对象
          readS.pipe(res)
          break
        }
        case '/css': {
          let readS = fs.createReadStream('style.css');
          readS.pipe(res)
          break
          }
        case '/img': {
            let readS = fs.createReadStream('yzs.jpg');
            readS.pipe(res)
            break
          }
        default:
          res.end()
          break
      }
    } else {
      //post
    }
  })
  .listen(7788)




相关文章
|
大数据 数据处理 分布式计算
JSF 逆袭大数据江湖!看前端框架如何挑战数据处理极限?揭秘这场技术与勇气的较量!
【8月更文挑战第31天】在信息爆炸时代,大数据已成为企业和政府决策的关键。JavaServer Faces(JSF)作为标准的 Java Web 框架,如何与大数据技术结合,高效处理大规模数据集?本文探讨大数据的挑战与机遇,介绍 JSF 与 Hadoop、Apache Spark 等技术的融合,展示其实现高效数据存储和处理的潜力,并提供示例代码,助您构建强大的大数据系统。
149 0
node笔记记录80练习1之3提交表单
node笔记记录80练习1之3提交表单
105 0
node笔记记录80练习1之3提交表单
node笔记记录80练习1之4提交表单
node笔记记录80练习1之4提交表单
88 0
node笔记记录80练习1之4提交表单
|
存储 前端开发 JavaScript
node-06-表单-upload
node-06-表单-upload
187 0
Node 04--使用Node处理表单请求与两种暴露方式
Node 04--使用Node处理表单请求与两种暴露方式
285 0
|
4月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
919 11
|
9月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
8月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
6637 24
|
9月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
473 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
9月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
下一篇
开通oss服务