nodejs復(fù)習(xí)筆記

node復(fù)習(xí)筆記

第一天

  • 前端向后臺(tái)服務(wù)器發(fā)送請(qǐng)求的類型
    • get: 用來(lái)獲取數(shù)據(jù)
    • post: 用來(lái)提交數(shù)據(jù)
  • 前端發(fā)送請(qǐng)求的方式
    • 地址欄中直接輸入地址恤溶;
    • form表單請(qǐng)求:
      • 可以跨域進(jìn)行提交數(shù)據(jù)盯荤,跨域指的是自己創(chuàng)建的服務(wù)器旨巷;
      • 缺點(diǎn):只能提交數(shù)據(jù)犹菱,不能對(duì)服務(wù)器響應(yīng)的數(shù)據(jù)進(jìn)行處理绕辖;
    • jQuery中的ajax請(qǐng)求:
      • 能進(jìn)行跨域提交數(shù)據(jù)胖腾,只能跨域獲取百度服務(wù)器中的數(shù)據(jù)霍比;不能獲取自己創(chuàng)建的服務(wù)器中的數(shù)據(jù)幕袱;
      • 自己服務(wù)器中必須設(shè)置跨域請(qǐng)求的設(shè)置;
    • 自己封裝的myAjax.js請(qǐng)求:
      • 本質(zhì)和jQuery中的ajax請(qǐng)求一樣悠瞬;
    • jsonp發(fā)送請(qǐng)求:通過(guò)script標(biāo)簽中src發(fā)送get請(qǐng)求们豌,可以進(jìn)行跨域請(qǐng)求;
  • 服務(wù)器獲取前端請(qǐng)求的數(shù)據(jù)
    • 獲取get請(qǐng)求的數(shù)據(jù):get請(qǐng)求的數(shù)據(jù)在地址欄中
      • 接收get請(qǐng)求的方式有三種:
      • 原生node方法:通過(guò)req.url來(lái)獲取地址字符串浅妆,通過(guò)split切割多次切割望迎,先通過(guò)"?"切割,再通過(guò)"&"切割凌外,獲取數(shù)組辩尊,遍歷,切割賦值對(duì)象康辑;
      • node自帶的系統(tǒng)模塊querystring和url模塊:1)模塊querystring摄欲;代碼:querystring.parse("key=val&key=val")獲得一個(gè)參數(shù)對(duì)象轿亮;2)模塊url;代碼url.parse(req.url,true).query獲取到一個(gè)參數(shù)對(duì)象胸墙;
    • 獲取post提交的數(shù)據(jù):post請(qǐng)求的數(shù)據(jù)在請(qǐng)求頭中哀托,相當(dāng)于把大塊數(shù)據(jù)拆分成多個(gè)小塊數(shù)據(jù);
      • 原生node方法:字符串拼接
        • 創(chuàng)建空字符串劳秋;
        • 通過(guò)on綁定兩個(gè)事件,data和end事件胖齐;
        • 在data事件匿名函數(shù)中玻淑,通過(guò)字符串拼接,會(huì)執(zhí)行多次呀伙,直到將所有小塊數(shù)據(jù)拼接完整补履;
        • 在end事件匿名函數(shù)中,可以獲取str為post提交的數(shù)據(jù)剿另;只執(zhí)行一次箫锤;
         const http=require("http");
         const server=http.createServer(function (req, res) {
             if(req.url==="/favicon.ico"){
                 return;
             }
             console.log("server is running");
             res.setHeader("Access-Control-Allow-Origin","http://localhost:63342");
             var str="";
             req.on("data",function (val) {
                 str+=val;
             });
             req.on("end",function () {
                 console.log(str);
                 res.end(str);
             })
         });
         server.listen(8888);
        
      • 第三方模塊formidable
        • 下載模塊并引入模塊;
        • 新建form對(duì)象:var form=new formidable.IncomingForm();
        • 解析上傳的數(shù)據(jù):form.parse(req,function(err,fields,files){})雨女;其中fileds獲取的post提交的數(shù)據(jù)谚攒;對(duì)象類型;
    • get和post請(qǐng)求共存方式
      • 將get請(qǐng)求獲取參數(shù)的代碼氛堕,放在post請(qǐng)求的綁定事件end中馏臭,因?yàn)閑nd只觸發(fā)一次;
  • 服務(wù)器進(jìn)行的跨域設(shè)置
    • 原生node:
      • 設(shè)置響應(yīng)頭:res.setHeader("Access-Control-Allow-Origin","域名");
    • express中的跨域請(qǐng)求
  • 地址路徑解析
    • req.url獲得的地址為:帶斜杠和后面的所有參數(shù)讼稚,如:/01.html?name=xxx&age=18;
      • 其中pathname為:/01.html括儒,包含斜杠;
      • 其中search為:?name=xxx&age=18锐想,包含問(wèn)號(hào)帮寻;不包括哈希值;
  • 知識(shí)點(diǎn)
    • 在for循環(huán)中赠摇,存在異步操作時(shí)固逗,需要等循環(huán)結(jié)束來(lái)輸出數(shù)據(jù),可以通過(guò)判斷i的值藕帜,來(lái)判斷循環(huán)是否結(jié)束抒蚜,條件判斷時(shí),可以設(shè)置i<=ary.length耘戚,在循環(huán)中判斷i===ary.length時(shí)嗡髓,循環(huán)結(jié)束;因?yàn)闂l件判斷為同步收津,會(huì)先于異步操作進(jìn)行判斷饿这,所以不能設(shè)置ary.length-1浊伙;

第二天

  • node模塊分類
    • 分為三大類:
      • 1)node自帶的模塊:如http,fs,querystring,url,path等;
      • 2)引入第三方模塊:nodejs天生自帶一個(gè)包管理器npm长捧;
      • 3)自定義模塊:自己創(chuàng)建的JS文件
        • 通過(guò)require引入自定義模塊嚣鄙,必須設(shè)置相對(duì)路徑,./也不能省略串结,后綴.js可以省略哑子;
        • 引入自定義模塊后,獲取的變量取決于被引入模塊輸出的變量肌割;
        • 被引入模塊通過(guò)module.exports={xxx:fn}輸出對(duì)象變量卧蜓;
    • 三大類的加載順序:當(dāng)通過(guò)require引入模塊后,先在系統(tǒng)自帶的模塊中查找把敞,查找不到弥奸,在第三方模塊中查找,即在node_modules文件夾中查找奋早,若再找不到盛霎,就通過(guò)相對(duì)路徑在自定義模塊中查找;
  • 項(xiàng)目開發(fā)步驟:
    • 命令行進(jìn)入文件夾
    • git init:文件夾初始化耽装;
    • npm init:項(xiàng)目初始化愤炸,按照順序設(shè)置,生成package.json文件掉奄;
      • 通過(guò)npm init --y快速創(chuàng)建文件摇幻;
    • npm install xxx -g:安裝到全局;
    • npm i xxx --save-dev: 安裝到當(dāng)前目錄下挥萌;會(huì)在devdependencies中出現(xiàn)绰姻,指的是開發(fā)過(guò)程中的依賴;
    • npm i xxx --save:安裝到當(dāng)前目錄下引瀑,會(huì)在dependencies中出現(xiàn)狂芋,指的是在上線過(guò)程中的依賴;
    • npm uninstall xxx:卸載模塊憨栽;
  • 登錄注冊(cè)功能實(shí)例:
    • 登錄注冊(cè)頁(yè)面加載:
      • 通過(guò)地址欄發(fā)送get請(qǐng)求帜矾,設(shè)置pathname為html文件名;
      • 服務(wù)器中通過(guò)系統(tǒng)模塊url屑柔,獲取pathname屡萤,然后通過(guò)fs.readFile(path,function(err,data){})來(lái)讀取文件,其中path為html的相對(duì)路徑掸宛,通過(guò)res.end(data)來(lái)將讀取的數(shù)據(jù)渲染到前端頁(yè)面中死陆,進(jìn)而使頁(yè)面呈現(xiàn);
    • 頁(yè)面加載后,通過(guò)script的src引入的jquery.js文件措译,會(huì)再次發(fā)送一次get請(qǐng)求别凤,請(qǐng)求的地址pathname為引入的相對(duì)路徑,也必須通過(guò)fs.readFile讀取渲染到頁(yè)面领虹,頁(yè)面的jquery.js功能才能使用规哪;

第三天

  • 第三方模塊mime:
    • 通過(guò)npm i mime進(jìn)行安裝
    • 用處:頁(yè)面在加載文件時(shí),如css,html,js等,需要設(shè)置Content-Tyep類型塌衰;所以可以通過(guò)mime.getType(".css")來(lái)獲取對(duì)應(yīng)的類型诉稍,進(jìn)而設(shè)置;
    • 給頁(yè)面設(shè)置代碼fs.writeHeader(200,{"Content-Type":mime.getType(extname));
    • 配合path系統(tǒng)模塊使用最疆,獲取后綴名杯巨;
  • 第三方模塊formidable
    • 用于在服務(wù)器端獲取form表單post提交的file文件數(shù)據(jù);
    • fs.rename(oldPath,newPath,function(err){}):用來(lái)將相對(duì)路徑下的文件名修改為新的路徑下的文件名肚菠;
  • 第三方模塊silly-datetime
    • 用于將當(dāng)前時(shí)間轉(zhuǎn)化為具體格式的時(shí)間;
    • 代碼:sd.format(new Date(),"YYYY-MM-DD HH:mm:ss");
  • 知識(shí)點(diǎn):
    • fs.readFile(path,callback)中的path里的./public代表的是根目錄下的public文件夾罩缴,./代表的根目錄蚊逢,與js文件的位置無(wú)關(guān);
    • form表單通過(guò)submit自動(dòng)提交數(shù)據(jù)箫章,不涉及跨域的情況烙荷,如html文件在63342端口號(hào)下打開,而form表單中action設(shè)置的域名端口號(hào)為8888檬寂,提交數(shù)據(jù)到8888的服務(wù)器终抽,不會(huì)出錯(cuò),服務(wù)器8888中無(wú)需設(shè)置跨域請(qǐng)求代碼桶至;
    • jQuery中的ajax發(fā)送請(qǐng)求昼伴,若不在同一域名下發(fā)送請(qǐng)求,必須在服務(wù)器中設(shè)置跨域請(qǐng)求代碼镣屹;否則無(wú)法拿到服務(wù)器響應(yīng)的數(shù)據(jù)圃郊;
  • express框架
    • 設(shè)置靜態(tài)資源目錄:用于放置靜態(tài)文件,如css,js等女蜈;
      • 代碼:app.use(express.static("./static"))持舆;其中./代表的是根目錄;相當(dāng)于app.use("/",express.static("./static"));
    • 若請(qǐng)求的pathname為正則表達(dá)式伪窖;那么可以通過(guò)req.params來(lái)獲取小分組的數(shù)據(jù)逸寓;為對(duì)象,屬性名從0開始覆山,0對(duì)應(yīng)第一個(gè)小分組的數(shù)據(jù)竹伸;
    • express自帶的正則功能:未定的用:xxx替代,通過(guò)req.params.xxx獲却乜怼佩伤;聊倔、
      • 若有嚴(yán)格匹配的,執(zhí)行嚴(yán)格匹配生巡,不執(zhí)行正則功能匹配耙蔑;
      • 若想執(zhí)行非嚴(yán)格匹配,可以在嚴(yán)格匹配中設(shè)置next();
  • ejs模板
    • 服務(wù)器中必須設(shè)置默認(rèn)模板引擎為ejs;
      • 代碼:app.set("view engine","ejs");
    • express在使用ejs模板時(shí)孤荣,可以不引入ejs模塊甸陌,但必須下載ejs第三方模塊;
    • 必須將ejs文件放在views文件夾下盐股;

第四天

  • express創(chuàng)建的服務(wù)器中接收請(qǐng)求:
    • 接收get請(qǐng)求數(shù)據(jù):
      • 代碼:req.query;
      • 獲取類型為對(duì)象钱豁;
    • 接收post請(qǐng)求數(shù)據(jù):
      • 普通數(shù)據(jù):body-parser第三方模塊;既可以獲取表單提交的數(shù)據(jù)疯汁,也可以獲取ajax表單提交的數(shù)據(jù)牲尺;
        • 引入模塊:const bodyParser=require("body-parser")
        • 設(shè)置中間件:
         //針對(duì)提交類型為:application/x-www-form-urlencoded
         app.use(bodyParser,urlencoded({extended:false})
         //針對(duì)提交類型為:application/json;
         app.use(bodyParser,json())
        
        • 通過(guò)req.body拿到前端通過(guò)post請(qǐng)求提交的數(shù)據(jù)幌蚊;
      • 大文件:formidable模塊谤碳;
  • express中use設(shè)置路由請(qǐng)求:
    • use請(qǐng)求可以擴(kuò)充地址;地址不嚴(yán)格溢豆;可以用作接盤俠蜒简;
      • 格式代碼:app.use("/admin",function(req,res){})
      • req.originalUrl:拿到的是:包括基本地址的所有請(qǐng)求地址;
      • req.baseUrl:拿到的是:基本地址/admin"漩仙,如路由地址相同搓茬;
      • req.path:拿到的是:不包括基本地址,也不包括參數(shù)的其余地址队他;
      • req.url:拿到的是:不包括基本地址的所有請(qǐng)求地址卷仑;
      • 代碼:
       app.use("/admin",function (req, res) {
           //地址欄請(qǐng)求地址:http://localhost:8080/admin/aaa/bbb/index.js?name=guo&age=26
           //1.req.url拿到的是/admin后面的地址;
           console.log(req.url);//打印結(jié)果:/aaa/bbb/index.js?name=guo&age=26
           //2.req.originalUrl拿到真正的請(qǐng)求地址和傳給后臺(tái)的參數(shù)麸折;
           console.log(req.originalUrl);//打印結(jié)果:/admin/aaa/bbb/index.js?name=guo&age=26
           //3.req.baseUrl拿到的是基本的地址系枪,與路由地址一致;
           console.log(req.baseUrl);//打印結(jié)果:/admin
           //4.req.path拿到的是除了基本地址的其他子子孫孫的路徑地址磕谅;(不包含基本地址私爷,也不包含參數(shù))
           console.log(req.path);//打印結(jié)果:/aaa/bbb/index.js
           res.send("ok");
       });
      
  • 請(qǐng)求中的回調(diào)函數(shù)參數(shù)
    • next:當(dāng)同一個(gè)請(qǐng)求格式滿足多個(gè)同類型請(qǐng)求時(shí),會(huì)按著自上向下執(zhí)行膊夹,當(dāng)需要執(zhí)行第二個(gè)或下面的請(qǐng)求時(shí)衬浑,可以在第一個(gè)中設(shè)置next(),這樣就會(huì)再執(zhí)行下面代碼放刨;

第五天

  • 相冊(cè)集實(shí)例
    • 知識(shí)點(diǎn):
      • 在ejs模板中引入css,js等靜態(tài)文件時(shí)工秩,必須加上斜杠"/";
      • 在app.js路由設(shè)置中,嚴(yán)格的路由必須寫在非嚴(yán)格的路由前面助币;
      • 服務(wù)器中可以設(shè)置兩個(gè)靜態(tài)資源目錄浪听;
      • 在router.js文件中所有請(qǐng)求的匿名函數(shù);均要設(shè)置next,當(dāng)err情況下眉菱,設(shè)置next(),并阻斷程序執(zhí)行迹栓;
      • 利用use來(lái)充當(dāng)接盤俠的角色;
    • fs系統(tǒng)模塊
      • fs.unlink(path,function(err){}):刪除指定路徑下的文件俭缓;不能是文件夾克伊;
    • 注意:
      • return:阻斷程序執(zhí)行,不能放在異步操作中华坦,否則不能阻斷下面程序的執(zhí)行愿吹,必須放在外面;如果放在異步操作的后面惜姐,不會(huì)阻止該異步操作犁跪;

第六天

  • cookie
    • 作用:將信息存儲(chǔ)在瀏覽器端,在服務(wù)器中攜帶信息傳遞歹袁;
    • 沒(méi)有跨域限制坷衍;
    • 插件:cookie-parser express;
    • 設(shè)置:
      • res負(fù)責(zé)設(shè)置存儲(chǔ)信息:res.cookie("xxx","xxx",{});
        • maxAge設(shè)置存儲(chǔ)時(shí)間,httpOnly設(shè)置是否只允許http協(xié)議請(qǐng)求宇攻;
        • 設(shè)置signed:true惫叛,防止篡改倡勇;
      • req負(fù)責(zé)識(shí)別存儲(chǔ)信息逞刷;req.cookies.xxx;
    • 刪除cookie:res.clearCookie("xxx");
    • 查找:在控制臺(tái)Application中Cookies中查找;
    • 密鑰四步:secret:"密鑰";app.use(cookieParser("密鑰"))妻熊;signed:true夸浅;req.signedCookies;
  • session
    • 優(yōu)點(diǎn):
      • 亂碼顯示,安全性比cookie高扔役;
      • 在瀏覽器中通過(guò)設(shè)置一個(gè)亂碼id帆喇,然后在服務(wù)器中設(shè)置session數(shù)據(jù);
    • 依賴:
      • 依賴cookie亿胸,如果用戶在瀏覽器中禁用cookie后坯钦,session存儲(chǔ)的數(shù)據(jù)失效;
      • 依賴express模塊
    • 使用模塊:express-session模塊
    • 需要設(shè)置中間件
    • 設(shè)置和獲瘸扌:
      • 設(shè)置:req.session.xxx;
      • 獲韧竦丁:req.session.xxx;
      • 刪除:delete req.session;
  • webStorage;分為:localStorage和sessionStorage
    • localStorage:本地存儲(chǔ)在瀏覽器中序仙;不能傳遞給服務(wù)器端突颊;
      • 生命周期:只要通過(guò)setItem()設(shè)置后,在同一個(gè)瀏覽器中,就已經(jīng)存儲(chǔ)上律秃,不會(huì)消失爬橡,只能通過(guò)removeItem()或clear()來(lái)刪除;注意:同一個(gè)瀏覽器中不同的文件中棒动,都可以拿到存儲(chǔ)數(shù)據(jù)糙申,并對(duì)其進(jìn)行操作;
      • localStorage:是類函數(shù)Storage的實(shí)例迁客,類的原型上存在多個(gè)方法郭宝,進(jìn)行本地存儲(chǔ)的操作;
      • 私有屬性:length掷漱,指綁定key的個(gè)數(shù)粘室;
      • 方法:setItem(key,value);getItem(key);removeItem(key);clear();key(索引值)
      • 調(diào)用方法:window.localStorage.setItem();,其中window可以省略卜范;
    • sessionStorage:本地存儲(chǔ)在一個(gè)會(huì)話中衔统,即一個(gè)頁(yè)面中;
      • 生命周期:儲(chǔ)存在本窗口中海雪,其他窗口不能獲取锦爵,關(guān)閉窗口后,存儲(chǔ)的數(shù)據(jù)會(huì)銷毀奥裸;
      • sessionStorage:也是類函數(shù)Storage的實(shí)例险掀,存在私有屬性和調(diào)用類函數(shù)的公共方法;
      • 調(diào)用方法:windos.sessionStorage.setItem();;
  • mongodb數(shù)據(jù)庫(kù)知識(shí)
    • 下載安裝mongdb時(shí)湾宙,連接超時(shí)樟氢,原因可能是防火墻關(guān)閉27017端口,可以短暫關(guān)閉防火墻或設(shè)置防火墻中允許訪問(wèn)27017端口侠鳄;
    • mongodb與nodejs配合使用時(shí)埠啃,下載不同版本的mongodb模塊,使用不同的方式連接數(shù)據(jù)庫(kù)和獲取數(shù)據(jù)庫(kù)數(shù)據(jù)信息伟恶;
    • mongodb新建本地?cái)?shù)據(jù)庫(kù)
      • 代碼:mongod --storageEngine mmapv1 --dbpath 數(shù)據(jù)庫(kù)存儲(chǔ)地址;新建一個(gè)mmapv1格式的數(shù)據(jù)庫(kù)碴开;
      • 開機(jī):mongod --dbpath 數(shù)據(jù)庫(kù)存儲(chǔ)地址;
    • 數(shù)據(jù)庫(kù)插入多個(gè)數(shù)據(jù)的shell命令
      • 代碼:mongoimport --db 數(shù)據(jù)庫(kù)名字 --collection 集合 --drop --file 要導(dǎo)入的json數(shù)據(jù)的地址
      • 注:導(dǎo)入的json文件數(shù)據(jù),每個(gè)對(duì)象之間不需要連接博秫,報(bào)紅是正常的潦牛;
    • 封裝mongodb庫(kù)時(shí)的注意點(diǎn):
      • 查找數(shù)據(jù)時(shí),可以對(duì)數(shù)據(jù)進(jìn)行排序和分頁(yè)挡育,參數(shù)格式為:{"sort":{"age":-1},page,pageamount};
      • 獲取數(shù)據(jù)總個(gè)數(shù)時(shí)巴碗,通過(guò)col.countDocuments(function(err,count){});其中count為number類型,使用res.send(count)會(huì)報(bào)錯(cuò)静盅,因?yàn)閟end中不能設(shè)置數(shù)字類型良价,可以通過(guò)toString()方法寝殴,轉(zhuǎn)化為字符串;
  • mongoose知識(shí)
    • mongoose為mongodb的進(jìn)化版明垢,相當(dāng)于原生JS和jQuery的關(guān)系蚣常;

第七天

  • 登錄注冊(cè)項(xiàng)目
    • 知識(shí)點(diǎn):
      • 表單序列化:$("form").serialize();獲取表單提交的數(shù)據(jù);
      • MVC:models views controllers
  • 留言板項(xiàng)目
    • 知識(shí)點(diǎn)
      • 刪除按鈕時(shí)痊银,通過(guò)獲取數(shù)據(jù)的_id值抵蚊,來(lái)進(jìn)行刪除;
        • 模塊:通過(guò)mongodb中的模塊ObjectID溯革;引入模塊const ObjectID=require("mongodb).ObjectID;
        • 查找數(shù)據(jù)filter:{"_id":ObjectID(id);
        • 刪除數(shù)據(jù)成功后進(jìn)行重定向跳轉(zhuǎn)頁(yè)面:res.redirect("/xxx");

第九天

  • 圖片裁切功能
    • 軟件 GraphicsMagick
      • 功能:可以修改圖片的類型和裁切大小
      • 下載和安裝:安裝后配置環(huán)境變量贞绳,在全局下可以使用gm命令;
    • 通過(guò)第三方模塊gm來(lái)對(duì)指定文件夾下的圖片進(jìn)行裁切處理致稀,前提是必須下載GraphicsMagick冈闭,才能使用gm
      • 模塊:第三方模塊gm
    • 代碼:
     var gm=require("gm");
     gm("./img/p1.jpg")
         .crop(550,450,400,5)//裁切圖片中的寬、高抖单、左邊距萎攒、上邊距;
         .resize(200, 200, "!")//其中"!"作用為:強(qiáng)制變?yōu)?00*200的文件矛绘;
         .write("./img/meinv2.jpg",function (err) {
             if(err){
                 console.log(err);
             }else{
                 console.log("ok");
             }
         });
    
  • 圖片裁切實(shí)例
    • 在網(wǎng)站上扒代碼耍休;
    • 可以通過(guò)設(shè)置事件onSelect,在匿名函數(shù)中獲取參數(shù)c货矮,為一個(gè)對(duì)象羊精,對(duì)象中的數(shù)據(jù)為選中區(qū)域在原圖片中的寬,高囚玫,左邊距喧锦,上邊距等數(shù)據(jù);注:是比例變化前的大小位置劫灶;
    • 必須設(shè)置全局變量裸违,才能獲得私有作用域中的數(shù)據(jù)掖桦;
    • 預(yù)留的API接口:
      • getBounds():獲取圖片實(shí)際尺寸本昏;
      • getWidgetSize():獲取圖片顯示尺寸;
      • getScaleFactor():獲取圖片縮放的比例枪汪;
    • 網(wǎng)站鏈接:jQuery Jcrop 圖像裁剪;

第十天

  • 論壇項(xiàng)目
    • 知識(shí)點(diǎn):
      • session的設(shè)置
        • 判斷登錄與未登錄狀態(tài)涌穆;
        • 攜帶session在路由中間傳遞數(shù)據(jù);
        • session設(shè)置的位置:登錄成功后雀久,設(shè)置session宿稀;
        • session的運(yùn)用:通過(guò)判斷session是否設(shè)置,來(lái)顯示導(dǎo)航欄中的元素赖捌;
        • 設(shè)置:
          • login: 布爾值祝沸;決定登錄和未登錄狀態(tài)矮烹,通過(guò)if條件判斷來(lái)顯示不同的元素;
          • username: 用戶名罩锐,用于在數(shù)據(jù)庫(kù)中查找數(shù)據(jù)奉狈;和顯示用戶名;
          • imgsrc:頭像的地址涩惑;顯示該用戶名實(shí)時(shí)的頭像地址仁期;
      • 本地?cái)?shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù): 數(shù)據(jù)庫(kù):myforums
        • 集合:users
          • 內(nèi)容:1)用戶名;2)密碼竭恬;3)頭像圖片名跛蛋;
        • 集合:contents
          • 內(nèi)容:1)用戶名;2)評(píng)論痊硕;3)頭像圖片名赊级;4)發(fā)表時(shí)間;
      • 設(shè)置404頁(yè)面
        • 只要是通過(guò)get請(qǐng)求提交的路由岔绸,都要注意此衅,是否需要設(shè)置404頁(yè)面;
        • 404頁(yè)面可以通過(guò)判斷req.session.login是否存在亭螟,來(lái)進(jìn)行判斷挡鞍,當(dāng)不存在時(shí),設(shè)置next();
        • 通過(guò)use來(lái)設(shè)置接盤俠预烙,渲染404頁(yè)面墨微;
      • 設(shè)置靜態(tài)資源目錄
        • 簡(jiǎn)易方式:app.use(express.static("/public")),等同于app.use("/",express.static("./public"))
        • 設(shè)置指定路由:app.use("/avater",express.public("./mass"));即想要訪問(wèn)靜態(tài)資源目錄扁掸,必須加"/avater"前綴翘县;
    • 注意點(diǎn):
      • 修改頭像后,必須更新數(shù)據(jù)庫(kù)中兩個(gè)集合中的頭像地址數(shù)據(jù)谴分;更新成功后锈麸,必須更新session中設(shè)置的imgsrc;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牺蹄,隨后出現(xiàn)的幾起案子忘伞,更是在濱河造成了極大的恐慌,老刑警劉巖沙兰,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓奈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鼎天,警方通過(guò)查閱死者的電腦和手機(jī)舀奶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)斋射,“玉大人育勺,你說(shuō)我怎么就攤上這事但荤。” “怎么了涧至?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵纱兑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我化借,道長(zhǎng)潜慎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任蓖康,我火速辦了婚禮铐炫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒜焊。我一直安慰自己倒信,他們只是感情好卫玖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布拂到。 她就那樣靜靜地躺著她奥,像睡著了一般果正。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逻淌,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天祭埂,我揣著相機(jī)與錄音趴捅,去河邊找鬼套硼。 笑死卡辰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邪意。 我是一名探鬼主播九妈,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雾鬼!你這毒婦竟也來(lái)了萌朱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤策菜,失蹤者是張志新(化名)和其女友劉穎晶疼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體做入,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冒晰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年同衣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竟块。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耐齐,死狀恐怖浪秘,靈堂內(nèi)的尸體忽然破棺而出蒋情,到底是詐尸還是另有隱情,我是刑警寧澤耸携,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布棵癣,位于F島的核電站,受9級(jí)特大地震影響夺衍,放射性物質(zhì)發(fā)生泄漏狈谊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一沟沙、第九天 我趴在偏房一處隱蔽的房頂上張望河劝。 院中可真熱鬧,春花似錦矛紫、人聲如沸赎瞎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)务甥。三九已至,卻和暖如春喳篇,著一層夾襖步出監(jiān)牢的瞬間敞临,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工麸澜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哟绊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓痰憎,卻偏偏與公主長(zhǎng)得像票髓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铣耘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361