• 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);
    
  • 相关阅读:
    extjs数据类型
    Extjs 动态控制列显示
    400
    extjs主单清单同时编辑提交
    js-map模拟
    Leetcode 407.接雨水
    Leetcode 406.根据身高重建队列
    Leetcode 405.数字转化为十六进制数
    Leetcode 402.移掉k位数字
    Leetcode 401.二进制手表
  • 原文地址:https://www.cnblogs.com/n2meetu/p/8076020.html
Copyright © 2020-2023  润新知