node.js表单——formidable

 



npm install xxx -g 命令将模块 下载安装到全局目录中。

安装完formidable之后,一个标准的node project,应该有一个index.js文件,用于定义怎么处理来自 浏览器的request,index.js代码如下:

var http = require("http");//获取http对象
var url = require("url");//获取url对象
//http、url都是系统自带的模块,而下面的requestHandlers是我们手动编写的模块,对应当前目录下的requestHandlers.js文件
var requestHandlers = require("./requestHandlers");

//onRequest函数,用于处理http请求,不同的url请求交由不同的函数进行处理
function onRequest(request, response){
    var pathname = url.parse(request.url).pathname;//获取请求的URL

    //requestHandlers的handle属性又是一个对象,该对象包含多组属性:属性值,属性名对应uri,属性值对应处理函数,详见requestHandlers.js
    if(typeof requestHandlers.handle[pathname] === "function")
        requestHandlers.handle[pathname](request, response);
    else {
        console.log("No request handler found for " + pathname);
        response.writeHead(404, {"Content-Type": "text/html;charset=utf-8"});
        response.write("您访问的页面不存在!访问<a href='/'>首页</a>");
        response.end();
    }
}

var server = http.createServer(onRequest);//函数onRequest作为createServer的参数,这样浏览器每发送一次请求,服务器中该函数都会被调用一次
server.listen(8888);
//上面两句可以合写成http.createServer(onRequest).listen(8888);

 



var handle = {};
var formidable = require("formidable");

handle["/"] = start;
handle["/start"] = start;
handle["/upload"] = upload;

function start(request, response) {
  var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '学号:<input type="text" name="id" /><br /><br />'+
    '姓名:<input type="text" name="name" /><br /><br />'+
    '<input type="submit" value="提交" />'+
    '</form>'+
    '</body>'+
    '</html>';
    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

function upload(request, response) {
    var form = new formidable.IncomingForm();
    form.parse(request, function(error, fields, files) {
    console.log("id:" + fields.id);
    console.log("name:" + fields.name);
    response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
    response.write("id:" + fields.id + "<br>");
    response.write("name:" + fields.name);
    response.end();
    });
}

exports.handle = handle;
exports.start = start;
exports.upload = upload;