node.js|node.js 学习笔记04

form 表单发送 post 请求,node.js 原生接收 post 请求

  • 引入包之前,需要在当前文件夹下用命令行安装功能包
  • 原生 post 请求
var http = require('http'); var querystring = require('querystring'); var server = http.createServer(function(req,res){ //接收 post 请求 //需要判断,然后左对应的处理 // 最好把对应的请求转化成小写来判断 if(req.url == './dopost' && req.method.tolowerCase() == 'post'){ //处理数据 // 监听请求,监听每次数据的传递 //因为当表单特别大的时候,有可能阻塞线程 //所以,把表单分解成小块数据处理 //依次接收最后拼接即可 //设置一个字符串储存接收过来的数据 var allDatahttps://www.it610.com/article/= ''; req.addListener('data',function(chunk){ allData += chunk; }) //监听加载完毕 req.addListen('end',function(){ //处理数据 //将字符串转换成对象格式 var allObj = querystring.parse(allData); res.writeHead(200,{'Content-Type':'text/plain; charset=UTF8'}); res.end('success'); }) } }); server.listen(3000,'127.0.0.1');

  • form 表单的 enctype="multipart/form-data"
  • 在使用比偶暗淡上传文件的时候必须修改 enctype的值为multipart/form-data
使用 node.js 的 formidable 包完成接收 form 发出的 post 数据
var http = require('http'); var formidable = require('formidable'); var server = http.createServer(function(req,res){ //判断请求 if(req.url == '/dopost' && req.method.toLowerCase() == 'post'){ //创建对应的接收表单 var form = formidable.IncomingForm(); //表示解析传过来的表单,当解析的时候,表单传输完毕 //设置上传图片的路径 //设置路径的时候最好设置到 parse 外部,因为最好在解析完成之后就已经设置好路径 form.uploadDir = './uploads'; //表单传输完毕 form.parse(req,function(err,field,files){ //fields:表示所有的域:包含文本域,复选框域所有input //files:表示文件 var fileName = files.tupian.path; res.writeHead(200,{'Content-type':'text/plain'}); res.end('12345'); }) } }); server.listen(3000,'127.0.0.1');

修改上传的图片名称
/*修改图片的名称*/ var http =require('http'); var sd= require('silly-datetime'); var path = require('path'); var fs = require('fs'); var formidable = require('formidable'); //当上传图片后,对图片的名称进行修改 var server = http.createServer(function (req,res) {if(req.url == '/dopost' && req.method.toLowerCase() == 'post'){/*创建对应的接受的表单*/ var form = new formidable.IncomingForm(); /*设置图片上传的路径*/ form.uploadDir = './uploads'; //使用parse方法来接受解析对应的资源以及文件 form.parse(req,function (err,fields,files) {//获取旧的以及设置新的图片的名称,使用对应的新的图片名称修改旧的 //图片的名称一般是唯一性,我们可以使用当前的时间作为时间戳加上一个随机数字几乎就可以保证图片的名称的唯一性//2017-06-17-11:17:20 ,我们获取一个20170617111720作为时间戳 //需要把当前的时间转化成对应的格式 // format(new Date(), 'YYYY-MM-DD HH:mm'); var nowTime = sd.format(new Date(),'YYYYMMDDHHmmss'); var randomN = parseInt(Math.random()*8999) +10000; var extname = path.extname(files.tupian.path); //设置新的路径 //无论获取新的还是旧的路径,最好使用绝对路径var newPath = __dirname +'/uploads' +nowTime + randomN +extname; var oldPath =__dirname +'/'+files.tupian.path; //修改名称,使用file包 fs.rename(oldPath,newPath,function (err) { if(err){ throw Error('failure'); }//如果没有错误,设置响应头,然后返回successres.writeHead(200, {'content-type': 'text/plain'}); res.end("success"); })}) }else if(req.url = '/'){ //读取form.html,然后根据数据返回 fs.readFile('./form.html',function (err,data) { //设置想用头 res.writeHead(200,{'Content-Type':'text/html; charset=UTF8'}); res.end(data); }) }else{ //一种如果是/,就直接读取form表单 如果是其他的情况,就返回404 res.writeHead(404,{'Content-Type':'text/plain; charset=UTF8'}); res.end('404'); } })server.listen(3000,'127.0.0.1');

ejs 包的使用
var ejs = require('ejs'); var str = 'i buy phone' var dict = {a:7}; var html = ejs.render(str.dict); console.log(html);

    推荐阅读