express框架開發筆記

一、javascript

安裝:css

npm install -g expresshtml

npm install -gexpress-generatorjava

生成項目:node

express  -e  projectNameweb

 

express項目修改不重啓express

$ supervisor node bin/wwwnpm

讓supervisor監聽模板文件的改動數組

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

二、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路由配置的前面

三、頁面多個異步數據獲取渲染

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
});
})

 

四、時間格式化

npm install moment --save

moment = require('moment')

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

 

五、如何理解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); 

2、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服務端安裝對應的字體庫

相關文章
相關標籤/搜索