express实践(一)

涉及以下这些内容:

  1. 主体、
  2. cookie、session
  3. 数据
  4. 模板引擎

服务器基本结构:

const express=require('express');
const static=require('express-static');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
const bodyParser=require('body-parser');  //只能解析一般的post数据,不能解析post文件
const ejs=require('ejs');
const jade=require('jade');
var server=express();
server.listen(8080);

//1. 解析cookie
server.use(cookieParser('goreafspoibuodds'));
// 2. session
var arr=[];
for(var i=0;i<100000;i++){
    arr.push('keys_'+Math.random());
}
server.use(cookieSession({name:'张雯_sess_id',keys:arr,maxAge:20*3600*1000}));

// 3.post
server.use(bodyParser.urlencoded({extended:false}));  //不用扩展模式(extended:false)

//用户
server.use('/',function(req,res,next){
    console.log(req.query,req.body,req.cookies,req.session);
});

// 4.static
server.use(static('./www'));
body-parser 不够好 因为它只能解析一般的post数据,不能解析post文件.

如果要上传文件,然后读取文件的相关数据改怎么办?

html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <!-- 普通的post表单不能上传文件,只能用一个东西:enctype -->
    <!-- multipart/form-data 把表格的真实数据分割后上传 -->
    <form action="http://localhost:8080/" method="post" enctype="multipart/form-data">  
      文件:<input type="file" name="f1" /><br>
      <input type="submit" value="上传">
    </form>
  </body>
</html>

nodejs:

const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
// 想要上传文件,首先要又个multer对象
var objMulter=multer();

var server=express();

// 错误.bodyParser.urlencoded对应的form表单的enctype类型必须也是urlencoded
// server.use(bodyParser.urlencoded({encoded:false})); 

server.use(objMulter.any());

server.post('/',function(req,res){
    // console.log(req.body);  只能存储我们的用户名之类的
    console.log(req.files);  //可以用来存储文件
});

server.listen(8080);

注意:

1.enctype一共有三种类型:

2.multer有一些参数.比如any,意思是可以接收任何文件


比如single,意思是只能接收指定文件

执行结果:

nodejs的中间件Multer的可选参数

文件信息(file information):上传后的文件具有如下属性 
fieldname: 上传文件标签在表单中的name 
originalname:文件在用户电脑上的文件名 
Encoding:该文件的编码 
mimetype:该文件的Mime type 
size:该文件的字节数 
destination:该文件要保存的文件夹 
filename:在保存的文件夹下的文件名 
path:文件上传后保存的完整路径 
buffer:完整文件的buffer

接下来要借助这些参数完成的工作:

1.存完之后会发现,文件名没有后缀.这时候我们需要补上它原来的后缀名

2.把文件存放到指定的文件中去

如果要改文件名字,需要用到fs.rename()的功能:

const path=require('path');
const fs=require('fs');
var str='c:\\wamp\\www\\a.html';

var obj=path.parse(str);

//base      文件名部分
//ext       扩展名部分
//dir       路径部分
//name      文件名部分
console.log(obj.ext); //看看文件的后缀名是啥..

fs.rename('a.txt','b.txt',function(err){ //把a.txt改名为b.txt
    if(err){
        throw err;
    }
    console.log('done!');
});

总体的js文件:

const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
const fs=require('fs');
var pathlib=require('path');

// 想要上传文件,首先要又个multer对象
var objMulter=multer({dest:'./www/upload/'});

var server=express();

// 错误
// server.use(bodyParser.urlencoded({encoded:false}));
server.use(objMulter.any());

server.post('/',function(req,res){
    // console.log(req.body);  只能存储我们的用户名之类的
    console.log(req.files);  //可以用来存储文件

    // 获取原来文件的扩展名
    // 修改它的扩展名
    var newName=req.files[0].path+pathlib.parse(req.files[0].originalname).ext;

    fs.rename(req.files[0].path,newName,function(err){
        if(err)
            res.send('上传失败');
        else
            res.send('成功');
    });

});

server.listen(8080);
posted @ 2017-12-20 21:51  SingSingaSong  阅读(174)  评论(0编辑  收藏  举报