zoukankan      html  css  js  c++  java
  • express框架开发笔记

    1、

    安装:

    npm install -g express

    npm install -gexpress-generator

    生成项目:

    express  -e  projectName

    express项目修改不重启

    $ supervisor node bin/www

    让supervisor监听模板文件的改动

    $ supervisor --extensions html,css,js ./bin/www

    2、Express+Nodejs 下的登录拦截实现

    app.use(function (req, res, next) {
    var url = req.originalUrl;
    console.log("url"+url);
    if (url != "/login" && !req.session.user) {
    req.flash('error', "登录超时,请重新登录");
    return res.redirect("/login");
    }
    next();
    });

    注意:静态资源app.use(express.static(path.join(__dirname, 'public')));放在app.use(express.session());后面,登录拦截的前面

    登录拦截要放在node路由配置的前面

    3、页面多个异步数据获取渲染

    var async  = require('async');

    var task1 =function(callback){
    tool.sendRequest(headers,param,url,function(data){
    page=tool.page(data.count,pageNo,10);
    callback(null,{data:data,page:page})
    })
    }

    var task2 =function(callback){
    tool.sendRequest({"authId": authId,"userId":userId},{},config.interface.getGoodsClassify,function(data){
    callback(null,{data:data})
    })
    }

    async.parallel([task1,task2],function(err,result){
    if (err) { console.log(err);}
    res.render('goods', {
    data:result[0].data,
    name:name,
    classifyId:classifyId,
    sort:sort,
    sortlist:result[1].data,
    page:page
    });
    })

    4、时间格式化

    npm install moment --save

    moment = require('moment')

    console.log(moment(new Date()).format('YYYY-MM-DD HH:mm:ss'))

    5、如何理解JavaScript中给变量赋值,是引用还是复制

    JavaScript中的值分为2大类:基本类型和引用类型。每种类型下面又分为5种类型。

    基本类型:数字类型:Number;字符串类型:String;布尔类型:Boolean(true和false);Undefined;Null。

    引用类型:函数、数组、日期、正则、错误。

    注意:所有的引用类型都是对象,也就是Object对象下的一个类。

    对基本类型,是按值访问的,即通过值复制的方式来赋值和传递。

    对引用类型,是按引用访问的,即通过引用复制的方式赋值和传递。

    对于基本类型,将其值赋给一个变量时,就是将这个值赋值给了变量,值本身不会发生任何变化。在给变量重新赋值后,变量的值就变化了。

    以数组引用类型为例。JavaScript支持在定义变量的时候同时给它赋值,即var a=[1,2,3]同时定义一个对象并将其赋值给变量。

    定义一个对象(数组[1,2,3]),此时这个对象在内存中建立。当给把这个对象赋值给一个变量时,变量a仅仅是对这个对象的引用,而不是将该对象复制到了该变量中。即变量a中存储的是指向对象的地址。

    一 、nodejs下载文件方式为,设置响应头,文件传输方式分为两种:

    1.1 直接读取文件

    fs.readFile(filePath, function(isErr, data){  
           if (isErr) {  
                  res.end("Read file failed!");  
                  return;  
            }  
            res.writeHead(200,{  
                  'Content-Type': 'application/octet-stream', //告诉浏览器这是一个二进制文件  
                  'Content-Disposition': 'attachment; filename=' + fileName, //告诉浏览器这是一个需要下载的文件  
            });  
            res.end(data)  
    })  
    

    1.2 stream

    res.writeHead(200,{  
           'Content-Type': 'application/octet-stream', //告诉浏览器这是一个二进制文件  
           'Content-Disposition': 'attachment; filename=' + fileName, //告诉浏览器这是一个需要下载的文件  
    });  
    fs.createReadStream(filePath).pipe(res);  
    

    二、phantom 网页转PDF并下载

      async function renderToPdf(authId, courseID, courseName) {
      const instance = await phantom.create();
      const page = await instance.createPage();
    
      // 设置视口大小,相当于浏览器窗口
      page.property('viewportSize', {  1200, height: 700 });
    
      // 设置页面尺寸来控制在 PDF 中的展现形式
      page.property('paperSize', {
        format: 'A4',
         '1200px',
        height: '700px',
        orientation: 'portrait'
      });
    
      let url = global.dict.domain + '/viewPDF?courseID='+courseID + '&authentication=' + authId;
      const status = await page.open(url);
      console.log('status: ', status);
      const pdf = await page.render('./pdf/' + courseName + '.pdf');
      console.log('pdf: ', pdf);
      await instance.exit();  
    }
    
          await renderToPdf(authId, courseID, "download");
    
          fs.readFile("./pdf/download.pdf", function(isErr, data2){  
                if (isErr) {  
                      res.render('error.ejs', {
                        error: '导出文件出错'
                      }); 
                }  
                res.writeHead(200,{  
                      'Content-Type': 'application/octet-stream', //告诉浏览器这是一个二进制文件  
                      'Content-Disposition': 'attachment; filename=download.pdf', //告诉浏览器这是一个需要下载的文件  
                });  
                res.end(data2)  
          })  
    

    Linux提供的web服务,能在网页展示中文,下载pdf出现中文无法读取!要在Linux服务端安装对应的字体库

     
     
    青春承载希望,奋斗成就未来
  • 相关阅读:
    javascript 获取<td>标签内的值。
    关于网页中鼠标动作 onfocus onblur focus()
    web大前端面试——JavaScript
    vue吸顶
    vue单页面应用刷新网页后vuex的state数据丢失的解决方案
    vue 无缝滚动插件vue-seamless-scroll的安装与使用
    杂记
    webpack打包vue项目后,配置可以修改的配置文件
    不知道的CSS
    图片惰性加载(滚动到可视区时 图片才加载)
  • 原文地址:https://www.cnblogs.com/ckmouse/p/8022347.html
Copyright © 2011-2022 走看看