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', { width: 1200, height: 700 });

  // 设置页面尺寸来控制在 PDF 中的展现形式
  page.property('paperSize', {
    format: 'A4',
    width: '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服务端安装对应的字体库

 
 
posted @ 2017-12-11 11:46  青春无敌小宇宙  阅读(115)  评论(0编辑  收藏  举报