node07---post请求、表单提交、文件上传

简介:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="dopost" method="post" enctype="multipart/form-data">
        <p>
            姓名 : <input type="text" name="name">
        </p>
        <p>
            性别 : 
             <input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女"></p>
        <p>
            爱好:
            <input type="checkbox" name="hobby" value="睡觉" />睡觉
            <input type="checkbox" name="hobby" value="吃饭" />吃饭
            <input type="checkbox" name="hobby" value="足球" />足球
        </p>
        <p>
            图片:
            <input type="file" name="tupian" />
        </p>
        <p>
            <input type="submit" />
        </p>
    </form>
</body>
</html>
复制代码
复制代码
/**
 * poest提交表单
 */
var http = require("http");
var querystring = require("querystring");


//创建服务器
var server = http.createServer(function(req,res){//每次请求执行函数,外面的已经执行了。
    
    //如果你的访问地址是这个,并且请求类型是post
    if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
        console.log("req.url:" + req.url);
        console.log("req.method:" + req.method);
        var alldata = "";
        //下面是post请求接收的一个公式,node为了追求极致,它是一个小段一个小段接收的。
        //接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程,异步操作。
        req.addListener("data",function(chunk){
            alldata += chunk;
        });
        //全部传输完毕
        req.addListener("end",function(){
            var datastring = alldata.toString();
            res.end("success");
            //将datastring转为一个json对象
            var dataObj = querystring.parse(datastring);
            console.log(dataObj);
            console.log(dataObj.name);
            console.log(dataObj.sex);
        });
    }
});

server.listen(3000,"127.0.0.1");
复制代码

 

复制代码
三、post请求
1        var alldata = "";
2        //下面是post请求接收的一个公式
3        //node为了追求极致,它是一个小段一个小段接收的。
4        //接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程
5        req.addListener("data",function(chunk){
6            alldata += chunk;
7        });
8        //全部传输完毕
9        req.addListener("end",function(){
10            console.log(alldata.toString());
11            res.end("success");
12        });

原生写POST处理,比较复杂,要写两个监听。文件上传业务比较难写。
所以,用第三方模块。formidable。

只要涉及文件上传,那么form标签要加一个属性:
1<form action="http://127.0.0.1/dopost" method="post" enctype="multipart/form-data">
复制代码
复制代码
/**
 * 文件上传,改变了表单提交方式。
 */
var http = require("http");
var formidable = require('formidable');
var util = require("util");

console.log("qqq");
//创建服务器
var server = http.createServer(function(req,res){
    //如果你的访问地址是这个,并且请求类型是post
       console.log("qqqqqqq");
    if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
        var form = new formidable.IncomingForm();
        //设置文件上传存放地址
        form.uploadDir = "./uploads";
        //执行里面的回调函数的时候,表单已经全部接收完毕了。
        //姓名性别全在fields对象里面,files是文件
        form.parse(req, function(err, fields, files) {
            if(err){
                throw err;
            }
            console.log(fields);
            console.log(files);
            console.log(util.inspect({fields: fields, files: files}));
            //所有的文本域、单选框,都在fields存放;
            //所有的文件域,files
            res.writeHead(200, {'content-type': 'text/plain'});

            res.end("成功");
        });
    }
});

server.listen(3000);
复制代码

 文件上传并改名

复制代码
/**
 * Created by Danny on 2015/9/20 15:35.
 */
var http = require("http");
var formidable = require('formidable');
var util = require("util");
var fs = require("fs");
var sd = require("silly-datetime");
var path = require("path");


//创建服务器
var server = http.createServer(function(req,res){
    //如果你的访问地址是这个,并且请求类型是post
    if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
        //Creates a new incoming form.
        var form = new formidable.IncomingForm();
        //设置文件上传存放地址
        form.uploadDir = "./uploads";
        //执行里面的回调函数的时候,表单已经全部接收完毕了。
        form.parse(req, function(err, fields, files) {
            //if(err){
            //    throw err;
            //}
            //console.log(util.inspect({fields: fields, files: files}));

            //时间,使用了第三方模块,silly-datetime
            var ttt = sd.format(new Date(), 'YYYYMMDDHHmmss');
            var ran = parseInt(Math.random() * 89999 + 10000);
            var extname = path.extname(files.tupian.name);
            //执行改名
            var oldpath = __dirname + "/" + files.tupian.path;
            //新的路径由三个部分组成:时间戳、随机数、拓展名
            var newpath = __dirname + "/uploads/" + ttt + ran + extname;

            //改名
            fs.rename(oldpath,newpath,function(err){
                if(err){
                    throw Error("改名失败");
                }
                res.writeHead(200, {'content-type': 'text/plain'});
                res.end("成功");
            });
        });
    }else if(req.url == "/"){
        //呈递form.html页面
        fs.readFile("./form.html",function(err,data){
            res.writeHead(200, {'content-type': 'text/html'});
            res.end(data);
        })
    }else{
        res.writeHead(404, {'content-type': 'text/html'});
        res.end("404");
    }
});

server.listen(80,"192.168.41.36");
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7036201.html,如需转载请自行联系原作者

相关文章
|
3月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
30 0
|
4月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(上)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
32 0
|
4月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(下)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
数据采集 JavaScript 前端开发
利用axios库在Node.js中进行代理请求的实践
利用axios库在Node.js中进行代理请求的实践
|
9月前
|
JavaScript
node.js如何获取post和get请求的参数
node.js如何获取post和get请求的参数
67 0
|
5月前
|
JSON JavaScript 前端开发
Node.js GET、POST 请求是怎样的?
Node.js GET、POST 请求是怎样的?
64 1
|
5月前
|
前端开发 JavaScript
前端知识笔记(四十一)———nodejs发起http或https请求
前端知识笔记(四十一)———nodejs发起http或https请求
28 0
|
5月前
|
前端开发 JavaScript
前端知识笔记(六)———nodejs发起http或https请求
前端知识笔记(六)———nodejs发起http或https请求
31 0
|
8月前
|
JavaScript
如何使用 multiparty 工具库在 Node.js 应用里解析 multipart form-data 格式的请求
如何使用 multiparty 工具库在 Node.js 应用里解析 multipart form-data 格式的请求
79 1
|
11月前
|
JSON 监控 JavaScript
【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)
【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)