美文网首页
课时61-课时65笔记.md

课时61-课时65笔记.md

作者: 九旬大爷的梦 | 来源:发表于2018-11-20 10:22 被阅读17次

课时61 表单提交(GET请求) 使用url解析

制作一个简单的表单:

 <form action="http://127.0.0.1:8085" method="get">
        <p>姓名:<input type="text" name=“name”></p>
        <p>年龄:<input type="text" name="age"></p>
        <p>
            <input type="radio" name="sex" value="男">男
            <input type="radio" name="sex" value="女">女
        </p>
        <input type="submit" value="提交" id="">
    </form>

发送到http://127.0.0.1:8085

然后就可以通过parse把url解析后 就能拿到 提交的数据

Node接受提交的数据:

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

let server= http.createServer((request, response)=>{
   response.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"});
   response.end("hello world")
   //拿到提交的数据
   let myURl= url.parse(request.url, true);//解析url
   console.log(myURl);//查看解析后的url对象
   let queryObj= myURl.query;//拿到解析后的url对象里的query  他里面是提交的数据
   console.log(queryObj)//查看query  发现他是个字符串
   console.log(queryObj.name);//拿到znl
   console.log(queryObj.age);//拿到18
   console.log(queryObj.sex);//拿到男
});
server.listen(8085, '127.0.0.1')

注意:parse最后传一个true 这样它最后返回的数据都会以对象的形式展示

let myURl= url.parse(request.url, true);
//parse最后传一个true 这样它最后返回的数据都会以对象的形式展示   

console.log(myURl);查看解析后的url对象:

121541497584_.pic.jpg

console.log(queryObj) 查看query 发现他是个字符串:

141541497963_.pic.jpg
   console.log(queryObj.name);//拿到znl
   console.log(queryObj.age);//拿到18
   console.log(queryObj.sex);//拿到男
151541498217_.pic.jpg

课时62 表单提交_POST请求上

index.html


    <form action="http://127.0.0.1:8086/postmsg" method="post">
        <p>姓名:<input type="text" name=’name></p>
        <p>年龄:<input type="text" name="age"></p>
        <p>
            <input type="radio" name="sex" value="男">男
            <input type="radio" name="sex" value="女">女
        </p>
        <p>
            <span>爱好:</span>
                <input type="checkbox" name="college" value="打球">打球
                <input type="checkbox" name="college" value="跑步">跑步
                <input type="checkbox" name="college" value="游泳">游泳
        </p>
        <p>
            <span>照片:</span>
            <input type="file" name="photo" id="">
        </p>
        <input type="submit" value="提交" id="">
    </form>

form_post.js

let http= require('http');
let url= require('url');
 
let server= http.createServer((req,res)=>{
    console.log(req.url);//查看请求的url
    console.log(req.method)//查看请求方式
    if(req.url === '/postmsg' && req.method.toLowerCase() === 'post'){
        console.log('psot请求成功! ')
    }
   res.end('hello world!')
});
server.listen(8086, '127.0.0.1');

课时63 表单提交_POST请求上

Node 的querystring模块:
使用querystring.parse(str); 可以把字符串转化成一个对象,
例子,查询字符串 'foo=bar&abc=xyz&abc=123'被解析成:

{
  foo: 'bar',
  abc: ['xyz', '123']
}

form_post.js

let http= require('http');
let url= require('url');
let querystring = require("querystring");

let server= http.createServer((req,res)=>{
    console.log(req.url);//查看请求的url
    console.log(req.method)//查看请求方式
    if(req.url === '/postmsg' && req.method.toLowerCase() === 'post'){
        //1. 定义接受变量
        let allData = '';
        //2. 接受小段数据
        req.on('data', (buf)=>{
            allData += buf;
        });
        //3. 所有数据接受完毕
        req.once('end', ()=>{
            console.log('ok');
            let dataObj= querystring.parse(allData);
            //使用node自带的模块 querystring 吧字符串反序列化成一个对象
            console.log(dataObj);
            console.log(dataObj.name);
        });
    }
   res.end('hello world!')
});
server.listen(8086, '127.0.0.1');

返回结果:


21542616576_.pic.jpg

参考:Node 之querystring模块

课时64 表单提交_图片处理上

html

<form action="http://127.0.0.1:8087/postmsg" method="post" enctype="multipart/form-data">
        <p>姓名:<input type="text" name="name"></p>
        <p>年龄:<input type="text" name="age"></p>
        <p>
            <input type="radio" name="sex" value="男">男
            <input type="radio" name="sex" value="女">女
        </p>
        <p>
            <span>爱好:</span>
                <input type="checkbox" name="college" value="打球">打球
                <input type="checkbox" name="college" value="跑步">跑步
                <input type="checkbox" name="college" value="游泳">游泳
        </p>
        <p>
            <span>照片:</span>
            <input type="file" name="photo" id="">
        </p>
        <input type="submit" value="提交" id="">
    </form>

js

let http= require('http');
let url= require('url');
let util = require('util');
let formidable = require('formidable');

let server= http.createServer((req, res)=>{
    if (req.url == '/postmsg' && req.method.toLowerCase() == 'post') {
        //1. 实例化 formidable 对象
        let form = new formidable.IncomingForm();
        //2. 设置上传的文件路径
        form.uploadDir = "./uploads";
        //3. 获取表单的内容
        form.parse(req, (err, fields, files) =>{
          res.writeHead(200, {'content-type': 'text/plain; charset=utf-8'});
          res.write('提交的数据是:\n');
          res.end(util.inspect({fields: fields, files: files}));
          //把一个对象转成一个字符串 显示在页面上
        }); 
    }
});

server.listen(8087, '127.0.0.1');

返回结果:


31542623387_.pic.jpg

参考资料:node-formidable

课时65 表单提交_图片处理下

html

<form action="http://127.0.0.1:8089/postmsg" method="post" enctype="multipart/form-data">
        <p>姓名:<input type="text" name="name"></p>
        <p>年龄:<input type="text" name="age"></p>
        <p>
            <input type="radio" name="sex" value="男">男
            <input type="radio" name="sex" value="女">女
        </p>
        <p>
            <span>爱好:</span>
                <input type="checkbox" name="college" value="打球">打球
                <input type="checkbox" name="college" value="跑步">跑步
                <input type="checkbox" name="college" value="游泳">游泳
        </p>
        <p>
            <span>照片:</span>
            <input type="file" name="photo" id="">
        </p>
        <input type="submit" value="提交" id="">
    </form>

js

let http= require('http');
let util = require('util');
let formidable = require('formidable');
const uuidv1 = require('uuid/v1');
const path= require('path');
const fs =require('fs');

let server= http.createServer((req, res)=>{
    if (req.url == '/postmsg' && req.method.toLowerCase() == 'post') {
        //1. 实例化 formidable 对象
        let form = new formidable.IncomingForm();
        //2. 设置上传的文件路径
        form.uploadDir = "./uploads";
        //3. 获取表单的内容
        form.parse(req, (err, fields, files) =>{
            // 3.1 使用uuid生成随机名称
            let imgName= uuidv1();
            // 3.2 使用path截取图片后缀
            let extName= path.extname(files.photo.name);
            //3.3 设置路径
            let oldPath= __dirname + "/" + files.photo.path;
            let newPath= __dirname + "/uploads/"+ imgName + extName;
            // console.log(oldPath,newPath)
            //3.4 使用fs模块的改名 
            fs.rename(oldPath, newPath, (err) => {
                if (!err) {
                    res.writeHead(200, {'content-type': 'text/html; charset=utf-8'});
                    res.write('提交成功 \n');
                    console.log("已完成重命名");
                    res.end(util.inspect({fields: fields, files: files}));
                    //把一个对象转成一个字符串 显示在页面上
                }else{
                    console.log("重命名失败")
                }
              });
        }); 
    }
});

server.listen(8089, '127.0.0.1');

参考:
node-uuid 生成一个独一无二的名字
path-extname 获取后缀
fs-rename 修改文件名称

相关文章

网友评论

      本文标题:课时61-课时65笔记.md

      本文链接:https://www.haomeiwen.com/subject/cyzuxqtx.html