node js 接收表单数据原理
/** * node js 接收表单数据 */const http = require("http");const qs = require("querystring");http.createServer((request, response) => { // 表单提交的原理 if (request.url === "/post" && request.method.toLowerCase() === "post") { // 1. 设置接收的变量 let formData = ""; // 2. 接收小段数据 request.on("data", buf => { formData += buf; }); // 3. 监听所有数据传递完毕事件 request.once("end", () => { formData = qs.parse(formData); console.log(formData); // object console.log("数据接收完成"); }); }}).listen(3000);
使用 formidable 上传文件
/** * 使用formidable上传图片 */const http = require("http");const fs = require("fs");const formidable = require("formidable");const uuidv1 = require("uuid/v1");const path = require("path");http.createServer((request, response) => { if (request.url == "/") { fs.readFile(__dirname+"/index.html", (err, data)=>{ if (err) {throw err;} response.setHeader("content-type", "text/html;charset=utf8;"); response.end(data.toString()); }); } if (request.url === "/post" && request.method.toLowerCase() === "post") { // 1.实例化对象 const form = new formidable(); // 2.设置文件上传的路径, 默认就会自动上传到这个目录中,这个目录必须要存在,否则报错, 不建议使用相对路径 form.uploadDir = __dirname + '/uploads'; // 3.获取表单内容 form.parse(request, (err, fields, files)=> { /****************** 利用formidable的文件名 // 3.1 获取原文件名 let ext = path.extname(files.file.name); // 3.2 获取上传文件的路径 let oldPath = files.file.path; // 3.3 拼接新路径 let newPath = oldPath + ext; console.log(newPath); // 3.4 修改文件名 或者使用 uuid 这个包, 二选一 ************************************/ // 3.1 获取独一无二的一个字符串 uuid let uuid = uuidv1(); // 3.2 获取上传文件的后缀 let ext = path.extname(files.file.name); // 3.3 获取路径 let oldPath = files.file.path; let newPath = __dirname + "/uploads/" + uuid + ext; // 3.4 修改文件名 fs.rename(oldPath, newPath, err=>{ if (err) throw err; response.end("文件上传成功"); }); response.end("images"); }); } // response.end("404");}).listen(3000);