摘要:介紹如有不詳細(xì)或者不正確的地方多多指正。可以通過官方提供的命令行進(jìn)行安裝,官方目前默認(rèn)的界面文件用格式,建議修改為格式的文件版權(quán)問題,同時(shí)要在中安裝對應(yīng)的包和設(shè)置對應(yīng)的界面引擎解釋器。
express介紹
如有不詳細(xì)或者不正確的地方多多指正。
我們可以拿js與jquery關(guān)系來類比一下:
jQuery是JS在瀏覽器環(huán)境下的封裝庫,把DOM操作,ajax等封裝成了兼容性好,方便使用的方法
node是JS的一個(gè)非瀏覽器運(yùn)行平臺,里面提供API進(jìn)行web服務(wù)器開發(fā),封裝了node關(guān)于web的一些API
兩者有相同之處,express和jQuery都是對自己平臺(node,DOM API)進(jìn)行了封裝
兩者有不同之處,功能范疇完全不一樣。express開發(fā)服務(wù)器,jquery做瀏覽器端操作。
express可以通過官方提供的命令行進(jìn)行安裝,官方目前默認(rèn)的界面文件用jade格式,建議修改為pug格式的文件(jade版權(quán)問題) ,同時(shí)要在package.json中安裝對應(yīng)的npm包和app.js app.set("view engine", "pug")設(shè)置對應(yīng)的界面引擎解釋器。
路由 get請求路由的使用首先要引入express的路由模塊,express官網(wǎng)的一個(gè)簡單的get請求路由示例
var express = require("express"); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get("/", function(req, res) { res.send("hello world"); });post請求
post請求首先要引入bodyparse中間件,它用于解析客戶端請求中的body中的內(nèi)容,
使用express應(yīng)用生成器生成一個(gè)網(wǎng)站,它默認(rèn)已經(jīng)使用了 bodyParser.json 與 bodyParser.urlencoded 的解析功能,除了這兩個(gè),bodyParser還支持對text、raw的解析。
app.use(bodyParser.json())bodyParser.json是用來解析json數(shù)據(jù)格式的
app.use(bodyParser.urlencoded({ extended: false }))bodyParser.urlencoded則是用來解析我們通常的form表單提交的數(shù)據(jù),也就是請求頭中包含這樣的信息: Content-Type: application/x-www-form-urlencoded;
extended:如果設(shè)置為false,那么對URL-encoded的數(shù)據(jù)的解析采用querystring庫,如果設(shè)置為true那么采用qs庫((querystring和qs的不同))
// home.pug $.ajax({ url:userPath+"/userinfo-company", data:{ module:"user", userId:userId }, type:"POST", success:function(res){ alert(res); }, error:function(error){ console.log(error); } }); // index.js var bodyParser = require("body-parser"); // bodyparser中間件 // bodyParser.json是用來解析json數(shù)據(jù)格式的 // bodyParser.urlencoded則是用來解析我們通常的form表單提交的數(shù)據(jù),也就是請求頭中包含這樣的信息: Content-Type: application/x-www-form-urlencoded router.post("/userinfo-company", function(req, res, next) { var module = req.body.module; var userid = req.body.userId; request( { url: nodeApi + "/menu/getInfo", method: "POST", form: { module: module, userId: userid } }, function(error,response,body) { if( response.statusCode == 200 ) { var tempArr = JSON.parse(body); } } ); })
安全性問題后臺無法讀取到cookie,后面將請求菜單的方法放在了js中,然后在將菜單傳到路由中,通過res.render進(jìn)行動(dòng)態(tài)渲染
router.post("/menu", function(req, res, next) { menuArr = JSON.parse(req.body.menuArr); res.send("OK"); });
后面發(fā)現(xiàn)可以傳遞cookie,但未在項(xiàng)目中使用
默認(rèn)情況下,cookies是禁用的。在defaults或options將jar設(shè)為true,使后續(xù)的請求都使用cookie.
var request = request.defaults({jar: true}) request("http://www.google.com", function () { request("http://images.google.com") })
通過創(chuàng)建request.jar()的新實(shí)例,可以使用定制的cookie,而不是request全局的cookie jar。
var j = request.jar() var request = request.defaults({jar:j}) request("http://www.google.com", function () { request("http://images.google.com") })
或者
var j = request.jar() var cookie = request.cookie("your_cookie_here") j.setCookie(cookie, uri, function (err, cookie){}) request({url: "http://www.google.com", jar: j}, function () { request("http://images.google.com") })
注意,setCookie至少需要三個(gè)參數(shù),最后一個(gè)是回調(diào)函數(shù)。
中間件Express 是一個(gè)自身功能極簡,完全是由路由和中間件構(gòu)成一個(gè)的web開發(fā)框架:從本質(zhì)上來說,一個(gè) Express 應(yīng)用就是在調(diào)用各種中間件。中間件(Middleware)是一個(gè)函數(shù),如果當(dāng)前中間件沒有終結(jié)請求-響應(yīng)循環(huán),則必須調(diào)用next()方法將控制權(quán)交給下一個(gè)中間件,否則請求就會(huì)掛起。
中間件分為:應(yīng)用級中間件,路由級中間件,錯(cuò)誤處理中間件,內(nèi)置中間件,第三方中間件。
上面用的bodyParser是應(yīng)用級的中間件,router是路由級的中間件,有關(guān)中間件更詳細(xì)的內(nèi)容參見express官網(wǎng)(express中間件)
一些小的注意點(diǎn)模板引擎前面的縮進(jìn)要么是空格或者是tab,如果兩者混用會(huì)報(bào)錯(cuò)。
express更改路由中的內(nèi)容的時(shí)候必須要重啟本地服務(wù)器。只需要全局安裝supervisor,然后命令行supervisor app.js就可以自動(dòng)重啟。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92537.html
摘要:本文對過去和現(xiàn)在流行的實(shí)時(shí)推送技術(shù)進(jìn)行了比較與總結(jié)。以上我們介紹了三種實(shí)時(shí)推送技術(shù),然而各自的缺點(diǎn)很明顯,使用起來并不理想,接下來我們著重介紹另一種技術(shù)它是比較理想的雙向通信技術(shù)。 前言 隨著 Web 的發(fā)展,用戶對于 Web 的實(shí)時(shí)推送要求也越來越高 ,比如,工業(yè)運(yùn)行監(jiān)控、Web 在線通訊、即時(shí)報(bào)價(jià)系統(tǒng)、在線游戲等,都需要將后臺發(fā)生的變化主動(dòng)地、實(shí)時(shí)地傳送到瀏覽器端,而不需要用戶手動(dòng)...
摘要:寫在前面由于我對寫解析器只有閱讀了幾篇文章的知識量,因此水平并不是很高,此文權(quán)當(dāng)一次個(gè)人總結(jié),無法保證所涉及的知識點(diǎn)思路完全無誤,如有錯(cuò)誤,還請各位大佬指正。除此之外的狀態(tài)都是不合法的,這也就是有時(shí)候解析類的包比如會(huì)看到的錯(cuò)誤的情況。 寫在前面 由于我對寫解析器只有 閱讀了幾篇文章 的知識量,因此水平并不是很高,此文權(quán)當(dāng)一次個(gè)人總結(jié),無法保證所涉及的知識點(diǎn)、思路完全無誤,如有錯(cuò)誤,還請...
摘要:在后續(xù)的總結(jié)中,我會(huì)繼續(xù)分析,并準(zhǔn)備將一些值得分析的逐一解讀,也會(huì)涉及一些。從一個(gè)官方示例開始這是官方給出的一個(gè)簡單程序,運(yùn)行后訪問顯示。第一行載入了框架,我們來看源代碼中的。代碼的開始定義了一個(gè)函數(shù),函數(shù)有形參,,為回調(diào)函數(shù)。 這兩天仔細(xì)看了看express的源碼,對其的整個(gè)實(shí)現(xiàn)有了較清晰的認(rèn)識,所以想總結(jié)一下寫出來,如果有什么不對的地方,望指出。 這是第一篇,首先介紹一個(gè)最簡單的...
摘要:后端知識點(diǎn)總結(jié)基礎(chǔ)不是是一種軟件開發(fā)平臺,它的競爭對象歷史第一次有一種語言可以通吃前后端網(wǎng)站阿里云鏡像版本年初年中年底最新版本功能強(qiáng)大可靠,適合大型企業(yè)級項(xiàng)目簡單易用適合互聯(lián)網(wǎng)項(xiàng)目易用適合平臺性能好適合服務(wù)器端密集型項(xiàng)目不適合密集型項(xiàng)目密集 后端知識點(diǎn)總結(jié)——NODE.JS基礎(chǔ) 1.Node.js Node.js不是JS,是一種軟件開發(fā)平臺,它的競爭對象JSP/PHP/ASP.NET...
摘要:單頁博客應(yīng)用編寫總結(jié)很久之前就想寫一個(gè)博客應(yīng)用在一開始想要直接用和模板直接寫但是暑假一開始的時(shí)候不小心入了的坑所以就一不做二不休直接用寫那既然用了不寫個(gè)單頁應(yīng)用也過意不去了不前前后后寫了將近兩個(gè)星期現(xiàn)在看來這其實(shí)是一個(gè)很容易的應(yīng)用但是鑒于 React-Express單頁博客應(yīng)用編寫總結(jié) 很久之前就想寫一個(gè)博客應(yīng)用.在一開始想要直接用express和ejs模板直接寫, 但是暑假一開始的時(shí)...
閱讀 3421·2021-11-24 09:39
閱讀 1808·2021-11-17 09:33
閱讀 3539·2021-10-12 10:12
閱讀 5044·2021-09-22 15:51
閱讀 1122·2019-08-30 13:11
閱讀 3584·2019-08-30 10:59
閱讀 576·2019-08-30 10:48
閱讀 1323·2019-08-26 13:48