zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    (转)Java 详解 JVM 工作原理和流程
    sql复杂查询语句总结
    公众平台服务号、订阅号、企业号的相关说明
    新公司注册流程
    认缴出资额和实缴出资额的区别
    ***iOS学习之Table View的简单使用和DEMO示例(共Plain普通+Grouped分组两种)
    APP后端处理视频的方案
    iOS应用程序生命周期(前后台切换,应用的各种状态)详解
    app后端搜索入门
    APP后端处理表情的一些技巧
  • 原文地址:https://www.cnblogs.com/n2meetu/p/8076020.html
Copyright © 2011-2022 走看看