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); // objectconsole.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);