Express æç¨ 2ï¼å建ç«ç¹æ¡æ¶
æ¬èå°æ¼ç¤ºå¦ä½å建ä¸ä¸ªå¯æ·»å è·¯ç±ã模æ¿/è§å¾ãåæ°æ®åºè°ç¨çâ骨æ¶âç«ç¹ã
| åæï¼ | é ç½® Node å¼åç¯å¢ãå¤ä¹ Express æç¨ã |
|---|---|
| ç®æ ï¼ | ææ¡ç¨ Express åºç¨çæå¨ å建ç«ç¹çæ¹æ³ã |
æ¦è§
æ¬èæ¼ç¤ºäºå¦ä½ä½¿ç¨ Express åºç¨çæå¨ å建ä¸ä¸ªå¯æ·»å è·¯ç±ã模æ¿/è§å¾åæ°æ®åºè°ç¨çâ骨æ¶âç½ç«ãè¿éæä»¬å°ä½¿ç¨è¯¥çæå¨ä¸º æ¬å°å¾ä¹¦é¦ç½ç« åå»ºæ¡æ¶ï¼ä»¥ä¾¿å¨ä»¥åç« èæ·»å å ¶ä»ä»£ç ãè¿ç¨é常ç®åï¼åªéè¦å¨å½ä»¤è¡è¿è¡âçæå¨ + 项ç®åç§°âå³å¯ï¼æ¤å¤è¿å¯ä»¥æå®ç«ç¹ç模æ¿å¼æå CSS çæå¨ã
以ä¸å 容ä»ç»äºåºç¨çæå¨çç¨æ³ï¼ä»¥åè§å¾ / CSS çä¸äºä¸åé项ãè¿ä»ç»äºéª¨æ¶ç«ç¹çç»ç»ç»æãæåï¼æä»¬å°ä»ç»ç«ç¹çè¿è¡æ¹æ³ï¼ä»èå¯¹å ¶è¿è¡éªè¯ã
夿³¨ï¼Express åºç¨çæå¨å¹¶éå¯ä¸ç Express åºç¨çæå·¥å ·ï¼èä¸çæé¡¹ç®çç»æä¹ä¸æ¯ç»ç»æä»¶åç®å½çå¯ä¸å¯è¡æ¹å¼ãä½çæé¡¹ç®å ·ææäºæ©å±åçè§£çæ¨¡ååç»æãæç®åç Express åºç¨è¯·åé Hello world 示ä¾ï¼Express éåç«ï¼ã
使ç¨åºç¨çæå¨
夿³¨ï¼æ¬æç¨ä¸å½ä»¤æä½åºäº Linux/macOS ç bash ç»ç«¯ï¼Windows çå½ä»¤æç¤ºç¬¦ cmd/PowerShell ä¸ bash çæ¦å¿µåç¨æ³ç¥æä¸åï¼ä¸ºå¨ Windows ä¸è·å¾ä¸è´çä½éªï¼å¯ä»¥ï¼
- èªå·±å¼æ cmd/PowerShell ä¸ bash çåºå«ã
- ä½¿ç¨ Git æ MSYS2 为 Windows æä¾ç bashãï¼æ¨èï¼
- ä½¿ç¨ Windows ç Linux åç³»ç»ãï¼å° Microsoft Store ä¸æç´¢âLinuxâï¼å®è£ 忬¢ççæ¬ï¼Ubuntu 18.04ãopenSUSE 42ãDebian çï¼ï¼ä» é Windows 10ï¼ä½¿ç¨åéè¦å å®è£ WSLï¼
夿³¨ï¼ä½ å¯è½å·²ç»åç°å½å ç¨ NPM å¤ªæ ¢äºï¼è¿æ¯ç±ä¼æå¨ç¥çä¸å¯æåé æçãå¯ç¨æ·å®æä¾ç CNPM 代æ¿ä¹ï¼åè½åç¨æ³åºæ¬ä¸è´ï¼åªæ¯ä¸è½ä¸ä¼ èªå·±çå ï¼ã
ä½ åºè¯¥å·²ç»å®è£ 好äºçæå¨ï¼å®æ¯ 设置 Node å¼åç¯å¢ çä¸é¨åãå¯ä»¥ä½¿ç¨ NPM æ¥å®è£ å ¨å±ççæå¨ï¼å¦ä¸æç¤ºï¼
sudo npm install express-generator -g
çæå¨æè®¸å¤é项ï¼å¯ä»¥ä½¿ç¨ --helpï¼æ -hï¼å½ä»¤è¿è¡æ¥çï¼

大æå¦ä¸ï¼
$ express --help
ç¨æ³ï¼express [é项] [ç®å½]
é项ï¼
--version æå°çæ¬å·
-e, --ejs æ·»å ejs å¼ææ¯æ
--pug æ·»å pug å¼ææ¯æ
--hbs æ·»å handlebars å¼ææ¯æ
-H, --hogan æ·»å hogan.js å¼ææ¯æ
-v, --view <engine> æ·»å <engine> è§å¾å¼ææ¯æ (ejs|hbs|hjs|jade|pug|twig|vash) (é»è®¤ä¸º jade)
-c, --css <engine> æ·»å <engine> æ ·å¼è¡¨å¼ææ¯æ (less|stylus|compass|sass) (é»è®¤ä¸ºçº¯ css)
--git æ·»å .gitignore
-f, --force 对é空æä»¶å¤¹å¼ºå¶æ§è¡
-h, --help æå°å¸®å©ä¿¡æ¯
å¯ä»¥ç´æ¥è¿è¡ express å½ä»¤ï¼å°ä½¿ç¨ Jade è§å¾å¼æå纯 CSS å¨å½åç®å½ä¸å建项ç®ãï¼å¦ææå®ç®å½åï¼åå¨åç®å½ä¸å建项ç®ï¼ã
express
è¿å¯ä»¥ä½¿ç¨ --view éæ©è§å¾ï¼æ¨¡æ¿ï¼å¼æï¼å¹¶ä¸/æè
ä½¿ç¨ --css éæ© CSS çæå¼æã
夿³¨ï¼ä¸æ¨èç¨ --hoganã--ejsã--hbs çåæ°éç¨æ¨¡æ¿å¼æãè¯·ä½¿ç¨ --viewï¼æ -vï¼ã
æåºè¯¥ç¨åªä¸ªè§å¾å¼æï¼
Express åºç¨çæå¨æ¯æå¤æ¬¾æµè¡çè§å¾/模æ¿å¼æï¼å æ¬ EJSãHbsãPug (Jade)ãTwig å Vashï¼ç¼ºçéé¡¹æ¯ JadeãExpress æ¬èº«ä¹æ¯æå¤§éå ¶ä»æ¨¡æ¿è¯è¨ï¼å¼ç®±å³ç¨ã
夿³¨ï¼å¦æè¦ä½¿ç¨çæå¨ä¸æ¯æç模æ¿å¼æï¼è¯·åé å¨ Express ä¸ä½¿ç¨æ¨¡æ¿å¼æï¼Express ææ¡£ï¼åæéè§å¾å¼æçææ¡£ã
ä¸è¬æ¥è¯´ï¼ä½ åºè¯¥éæ©ä¸ä¸ªå¤§èå ¨çæ¨¡æ¿å¼æï¼å¯ä»¥å°½å¿«è¿å ¥çäº§ç¶æãå°±åä½ éæ©å ¶ä»ç»ä»¶ä¸æ ·ï¼éç¨æ¨¡æ¿å¼æéè¦èè以ä¸å ç´ ï¼
- è¿å ¥çäº§ç¶æçæ¶é´ââå¦æä½ çå¢éå·²ç»ææä¸ªæ¨¡æ¿è¯è¨çç»éªï¼é£ä¹ç¨å®å¯è½æ´å¿«è¿å ¥çäº§ç¶æãå¦åä½ åºè¯¥èèæé模æ¿å¼æçå¦ä¹ æ²çº¿ã
- æµè¡åº¦åæ´»è·åº¦ââè¦è¯ä¼°æéå¼æçæµè¡ç¨åº¦ï¼ä»¥å宿¯å¦æ¥ææ´»è·ç社åºãå¨ç½ç«ççå½å¨æä¸éå°é®é¢æ¶ï¼æ¯å¦è½å¤è·å¾ç¸å ³æ¯æé常éè¦ã
- 飿 ¼ââæäºæ¨¡æ¿å¼æä½¿ç¨ç¹å®æ è®°ï¼æ¥æ è¯æå ¥âæ®éâHTML ä¸çå 容ï¼èå¦ä¸äºæ¨¡æ¿å¼æä½¿ç¨ä¸åçè¯æ³ï¼ä¾å¦ä½¿ç¨ç¼©è¿åååç§°ï¼æé HTMLã
- æ§è½/æ¸²ææ¶é´ã
- åè½ââä½ åºè¯¥èèæé弿æ¯å¦å
·æä»¥ä¸åè½ï¼
- å¸å±ç»§æ¿ï¼å¯ä»¥å®ä¹åºæ¬æ¨¡æ¿ï¼ç¶åâç»§æ¿âå®çä¸é¨åï¼ä½¿ä¸å页é¢å¯ä»¥æä¸åçåç°ãè¿é常æ¯å å«å¤§éæéç»ä»¶ï¼ææ¯æ¬¡ä»å¤´å¼å§æå»ºæ¨¡æ¿æ´å¥½ã
- âå å«âæ¯æï¼å¯ä»¥éè¿å å«å ¶ä»æ¨¡æ¿æ¥æå»ºæ°æ¨¡æ¿ã
- ç®æçåéåå¾ªç¯æ§å¶è¯æ³ã
- è½å¤å¨æ¨¡æ¿çº§å«è¿æ»¤åéå¼ï¼ä¾å¦ï¼å°åé设置为大åï¼ææ ¼å¼åæ¥æå¼ï¼ã
- è½å¤çæ HTML 以å¤çè¾åºæ ¼å¼ï¼ä¾å¦ JSON æ XMLï¼ã
- æ¯æå¼æ¥æä½åæµã
- å¯ä»¥å¨åæ¶å¨å®¢æ·ç«¯åæå¡å¨ä¸ä½¿ç¨ã妿䏿¬¾æ¨¡æ¿å¼æå¯ä»¥å¨å®¢æ·ç«¯ä½¿ç¨ï¼é£ä¹å°±ä½¿å¨å®¢æ·ç«¯æç®¡æ°æ®å¹¶å®æææï¼æå¤§å¤æ°ï¼æ¸²ææä¸ºå¯è½ã
夿³¨ï¼äºèç½ä¸æè®¸å¤èµæºï¼å¯å¸®å©ä½ éæ©åéçè§å¾/模æ¿å¼æã
æ¬é¡¹ç®éç¨ Pug 模æ¿å¼æï¼Jade æ¯å®ä¸ä¹ åçæ¾ç¨åï¼ï¼å®æ¯ææµè¡ç Express / JavaScript 模æ¿è¯è¨ä¹ä¸ï¼ä¸å¯¹ Express çæå¨ å¼ç®±å³ç¨ã
æåºè¯¥ç¨åªä¸ª CSS 弿ï¼
Express åºç¨çæå¨æ¯ææå¸¸è§ç CSS 弿ï¼LESS, SASS, Compass, Stylusã
夿³¨ï¼CSS çä¸äºéå¶å¯¼è´æäºä»»å¡å®æèµ·æ¥é常å°é¾ãCSS 弿æä¾äºæ´å¼ºå¤§çè¯æ³æ¥å®ä¹ CSSï¼ç¶åå°å®ä¹ç¼è¯ä¸ºçº¯ CSS 便µè§å¨ä½¿ç¨ã
䏿¨¡æ¿å¼æä¸æ ·ï¼ä½ ä¹åºè¯¥ä½¿ç¨æ ·å¼è¡¨å¼æï¼è¿å¯ä»¥æå¤§åå¢éç产åãæ¬é¡¹ç®å°ä½¿ç¨åå§ CSSï¼é»è®¤çï¼ï¼å 为æä»¬å¯¹ CSS è¦æ±ä¸å¤æï¼æ²¡æå¿ è¦ä½¿ç¨å¼æã
æåºè¯¥ç¨åªä¸ªæ°æ®åºï¼
çæå¨çæç代ç ä¸ä½¿ç¨ãä¹ä¸å å«ä»»ä½æ°æ®åºãExpress åºç¨å¯ä»¥ä½¿ç¨ Node æ¯æçææ æ°æ®åºï¼Express æ¬èº«ä¸æä¾æ°æ®åºç®¡çæºå¶ï¼ã
æä»¬åç»è®¨è®ºæ°æ®åºéæé®é¢ã
å建项ç®
æä»¬ä¸ºæ¬å°å¾ä¹¦é¦åºç¨å建ä¸ä¸ªå为 express-locallibrary-tutorial ç项ç®ï¼ä½¿ç¨ Pug 模æ¿åºï¼ä¸ä½¿ç¨ CSS 弿ã
é¦å ï¼è¿å ¥å夿¾ç½®é¡¹ç®çç®å½ï¼ç¶åå¨å½ä»¤æç¤ºç¬¦è¿è¡ Express åºç¨çæå¨ï¼çæå¨å°å建ï¼å¹¶ååºï¼é¡¹ç®çæä»¶ï¼

çæå¨å¨æåè¿åè¯ä½ å¦ä½å®è£ ï¼package.json 䏿åçï¼ä¾èµï¼ä»¥åå¦ä½è¿è¡è¯¥åºç¨ã
è¿è¡éª¨æ¶ç½ç«
ç°å¨æä»¬å·²ç»æ¥æä¸ä¸ªå®æ´ç项ç®éª¨æ¶ãè½ç¶è¿ä¸ªç½ç«ç°å¨è¿åä¸äºä»ä¹ï¼ä½è¿è¡ä¸ä¸ï¼å±ç¤ºä¸ä¸å·¥ä½åç乿¯å¼å¾çã
-
é¦å ï¼å®è£ ä¾èµé¡¹ï¼
installå½ä»¤å°è·å项ç®ç package.json æä»¶ä¸ååºçææä¾èµé¡¹å ï¼ãbashnpm install -
ç¶åè¿è¡è¯¥åºç¨ã
bashDEBUG=express-locallibrary-tutorial:* npm start -
æå卿µè§å¨ä¸å¯¼èªè³ http://localhost:3000/ ï¼å°±å¯ä»¥è®¿é®è¯¥åºç¨ãä½ åºè¯¥å¯ä»¥çå°ï¼

ä¸ä¸ª Express åºç¨å°±é ç½®æåäºï¼å®æç®¡äº localhost:3000ã
夿³¨ï¼æå® DEBUG åéå¯å¯ç¨æ§å¶å°æ¥å¿è®°å½/è°è¯ãä¾å¦ï¼å½ä½ 访é®ä¸é¢ç页颿¶ï¼ä½ ä¼çå°åè¿æ ·çè°è¯è¾åºï¼
ç´æ¥éè¿ npm start å½ä»¤å¯å¨åºç¨ä¹å¯ä»¥ï¼ä½ä¸ä¼çå°è°è¯ä¿¡æ¯ã
æä»¶æ¹å¨æ¶é坿å¡å¨
åªæé坿å¡å¨æè½çå° Express ç½ç«æåçæ¹å¨ãæ¯æ¬¡æ¹å¨åæå¨å¯åæå¡å¨å®å¨å¤ªç¦äººäºï¼æå¿ è¦è±ç¹æ¶é´è®©è¿é¡¹å·¥ä½èªå¨åã
nodemon æ¯æç®ä¾¿çèªå¨åå·¥å ·ä¹ä¸ãé常å°å ¶å ¨å±å®è£ ï¼å ä¸ºå®æ¯ä¸ä¸ªâå·¥å ·âï¼ï¼
sudo npm install -g nodemon
è¿éè¿å¯ä»¥æå®ä½ä¸ºå¼åä¾èµå°å®è£ 卿¬å°ï¼äºæ¯ä½¿ç¨è¿ä¸ªé¡¹ç®çå¼å人ååªè¦å®è£ è¿ä¸ªåºç¨å°±è½èªå¨è·å¾ãéè¿ä»¥ä¸å½ä»¤å°å ¶å®è£ å¨éª¨æ¶é¡¹ç®çæ ¹ç®å½ï¼
npm install --save-dev nodemon
项ç®ç package.json æä»¶å°èªå¨æ·»å ä¸ä¸ªæ°ç屿§ï¼
"devDependencies": {
"nodemon": "^1.18.9"
}
å¦ææ²¡æå
¨å±å®è£
该工å
·ï¼å°±æ æ³ä»å½ä»¤è¡å¯å¨å®ï¼é¤éæä»¬å°å
¶æ·»å å°è·¯å¾ä¸ï¼ï¼ä½æ¯å¯ä»¥å¨ NPM èæ¬ä¸è°ç¨å®ï¼å 为 NPM ææ¡ææå·²å®è£
å
çä¿¡æ¯ãæ¾å° package.json ç scripts é¨åãå¨ "start" ä¸è¡çæ«å°¾æ·»å éå·ï¼å¹¶å¨æ°çä¸è¡ä¸æ·»å "devstart"ï¼å¦ä¸æç¤ºï¼
"scripts": {
"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"
},
ç°å¨å¯ä»¥ç¨æ°å»ºç devstart å½ä»¤å¯å¨æå¡å¨ï¼
DEBUG=express-locallibrary-tutorial:* npm run devstart
ç°å¨ï¼å¦æç¼è¾é¡¹ç®ä¸çä»»ä½æä»¶ï¼æå¡å¨å°èªå¨éå¯ï¼æè å¯ä»¥éæ¶ä½¿ç¨ rs å½ä»¤æ¥éå¯ï¼ãæ¥çæ´æ°åç页é¢éè¦ç¹å»æµè§å¨çâå·æ°âæé®ã
夿³¨ï¼è¿éå¿
须使ç¨ânpm run <scriptname>âå½ä»¤ï¼è䏿¯ npm startï¼å 为âstartâæ¬è´¨ä¸æ¯æ å°å°èæ¬ç䏿¡ NPM å½ä»¤ãæä»¬å¯ä»¥å¨ start èæ¬ä¸æ¿æ¢å®ï¼ä½æä»¬åªæ³å¨å¼åæé´ä½¿ç¨ nodemonï¼å æ¤æå¿
è¦åå»ºä¸æ¡æ°çèæ¬å½ä»¤ã
çæç项ç®
æä»¬æ¥ççååå建ç项ç®ã
ç®å½ç»æ
å®è£ 好ä¾èµé¡¹ççæé¡¹ç®å ·æå¦ä¸æä»¶ç»æï¼ä¸å¸¦â/âåç¼çæ¯æä»¶ï¼ï¼
/express-locallibrary-tutorial
app.js
/bin
www
package.json
/node_modules
[约 4,500 个åæä»¶å¤¹åæä»¶]
/public
/images
/javascripts
/stylesheets
style.css
/routes
index.js
users.js
/views
error.pug
index.pug
layout.pug
package.json æä»¶å®ä¹ä¾èµé¡¹åå ¶ä»ä¿¡æ¯ï¼ä»¥åä¸ä¸ªè°ç¨åºç¨å ¥å£ï¼/bin/wwwï¼ä¸ä¸ª JavaScript æä»¶ï¼çå¯å¨èæ¬ï¼èæ¬ä¸è¿è®¾ç½®äºä¸äºåºç¨çé误å¤çï¼å è½½ app.js æ¥å®æå ¶ä½å·¥ä½ã/routes ç®å½ä¸ç¨ä¸å模åä¿ååºç¨è·¯ç±ã/views ç®å½ä¿å模æ¿ã
ä¸é¢æ¥è¯¦ç»ä»ç»è¿äºæä»¶ã
package.json
package.json æä»¶ä¸å®ä¹äºåºç¨ä¾èµåå ¶ä»ä¿¡æ¯ï¼
{
"name": "express-locallibrary-tutorial",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
"devstart": "nodemon ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"express": "~4.16.0",
"http-errors": "~1.6.2",
"morgan": "~1.9.0",
"pug": "2.0.0-beta11"
},
"devDependencies": {
"nodemon": "^1.18.9"
}
}
ä¾èµå æ¬ express å ï¼åéç¨çè§å¾å¼æå ï¼pugï¼ãè¿æä»¥ä¸ä¸äºå®ç¨çå ï¼
- cookie-parserï¼ç¨äºè§£æ cookie 头æ¥å¡«å
req.cookiesï¼æä¾äºè®¿é® cookie ä¿¡æ¯çä¾¿æ·æ¹æ³ï¼ã - debugï¼ä¸ä¸ªå°å node è°è¯ç¨åºï¼ä»¿ç § node æ ¸å¿çè°è¯ææ¯å»ºç«ã
- http-errorsï¼å¤çé误ä¸é´ä»¶ã
- morganï¼node ä¸ç¨ HTTP 请æ±è®°å½å¨ä¸é´ä»¶ã
"scripts" é¨åï¼å®ä¹äºä¸ä¸ª "start" èæ¬ï¼å½è¿è¡ npm start æ¶ä¼è°ç¨å®æ¥å¯å¨æå¡å¨ãå¨èæ¬å®ä¹ä¸å¯ä»¥çå° start å®é
ä¸è¿è¡äº "node ./bin/www"ãè¿æä¸ä¸ª "devstart" èæ¬ï¼å¯ä»¥éè¿è¿è¡ npm run devstart æ¥è¿è¡ "nodemon ./bin/www"ã
"scripts": {
"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"
},
www æä»¶
æä»¶ /bin/www æ¯åºç¨å
¥å£ï¼å®åç第ä¸ä»¶äºæ¯ require() âçå®âçåºç¨å
¥å£ï¼å³é¡¹ç®æ ¹ç®å½ä¸ç app.js ï¼ï¼app.js ä¼è®¾ç½®å¹¶è¿å express()åºç¨å¯¹è±¡ã
#!/usr/bin/env node
/**
* Module dependencies.
* 模åä¾èµé¡¹ã
*/
var app = require("../app");
夿³¨ï¼require() æ¯ä¸ä¸ªå
¨å±ç node 彿°ï¼å¯å°æ¨¡å导å
¥å½åæä»¶ãè¿é使ç¨ç¸å¯¹è·¯å¾æå® app.js 模åï¼å¹¶çç¥äº .js æ©å±åï¼å¯éï¼ã
æä»¶çå
¶ä½é¨åå
为 app 设置端å£ï¼ç¯å¢åéä¸çé¢å®ä¹å¼æé»è®¤å¼ 3000ï¼ï¼åå建ä¸ä¸ª HTTP æå¡å¨ï¼ç¶åå¼å§çå¬è¯·æ±ï¼æ¥åæå¡å¨é误åè¿æ¥ä¿¡æ¯ãå
¶ä»å
容坿æ¶å¿½ç¥ï¼è¿éææå
容齿¯æºå¨çæç模æ¿ï¼ï¼ä½æå
´è¶£çè¯å¯ä»¥éæ¶åæ¥ççã
app.js
æ¤æä»¶å建ä¸ä¸ª express åºç¨å¯¹è±¡ï¼ä¾ç
§æ¯ä¾å½å为 appï¼ï¼éè¿åç§è®¾ç½®é项åä¸é´ä»¶æ¥è®¾ç½®è¿ä¸ªåºç¨ï¼ç¶åä»è¯¥æ¨¡åä¸å¯¼åºã以ä¸ä»£ç åªå±ç¤ºäºæä»¶ä¸å建å导åºåºç¨å¯¹è±¡çé¨åï¼
var express = require('express');
var app = express();
...
module.exports = app;
䏿ç www å
¥å£æä»¶ä¸ require() ç app å°±æ¯è¿é导åºçã
æä»¬æ¥è¯¦ç»äºè§£ä¸ä¸ app.js æä»¶ãé¦å
ï¼å®ä½¿ç¨ require() 导å
¥äºä¸äºå®ç¨ node åºï¼å
¶ä¸å
æ¬ä¹åç¨ NPM ä¸è½½ç expressãhttp-errorsãmorgan å cookie-parserï¼è¿æä¸ä¸ª path åºï¼å®æ¯ç¨äºè§£ææä»¶åç®å½çæ ¸å¿ node åºã
var express = require("express");
var createError = require("http-errors");
var logger = require("morgan");
var cookieParser = require("cookie-parser");
var path = require("path");
ç¶å require() çæ¯ç¨æ·è·¯ç±ç®å½ä¸ç模åãè¿äºæ¨¡å/æä»¶ç¨äºå¤çç¹å®çâè·¯ç±âï¼URL è·¯å¾ï¼ãå¯ä»¥éè¿æ·»å æ°æä»¶æ¥æ©å±éª¨æ¶åºç¨ï¼æ¯å¦æ·»å å¾ä¹¦ç¸å
³çè·¯ç±æ¥ååºææé¦è书ç®ã
var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
夿³¨ï¼æ¤æ¶æä»¬ååå¯¼å ¥äºæ¨¡åï¼è¿æ²¡æçæ£ä½¿ç¨è¿å ¶ä¸çè·¯ç±ï¼ç¨åä¼ä½¿ç¨ï¼ã
ä¸é¢æä»¬ç¨å¯¼å
¥ç express æ¨¡åæ¥å建 app 对象ï¼ç¶å使ç¨å®æ¥è®¾ç½®è§å¾ï¼æ¨¡æ¿ï¼å¼æãè®¾ç½®å¼æå两æ¥ï¼é¦å
设置 'views' 以æå®æ¨¡æ¿çåå¨æä»¶å¤¹ï¼æ¤å¤è®¾ä¸ºåæä»¶å¤¹ /viewsï¼ãç¶å设置 'view engine' 以æå®æ¨¡æ¿åºï¼æ¬ä¾ä¸è®¾ä¸ºâpugâ ï¼ã
var app = express();
// view engine setup
// è§å¾å¼æè®¾å®
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");
ä¸ä¸ç» app.use() è°ç¨å°ä¸é´ä»¶åºæ·»å è¿è¯·æ±å¤çé¾ãé¤äºä¹å导å
¥çç¬¬ä¸æ¹åºä¹å¤ï¼æä»¬è¿ä½¿ç¨ express.static ä¸é´ä»¶å°é¡¹ç® /public ç®å½ä¸ææéææä»¶æç®¡è³æ ¹ç®å½ã
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
ææä¸é´ä»¶é½å·²è®¾ç½®å®æ¯ï¼ç°å¨æï¼ä¹åå¯¼å ¥çï¼è·¯ç±å¤ç卿·»å å°è¯·æ±å¤çé¾ä¸ãä»è为ç½ç«çä¸åé¨åå®ä¹å ·ä½çè·¯ç±ï¼
app.use("/", indexRouter);
app.use("/users", usersRouter);
夿³¨ï¼è¿äºè·¯å¾ï¼'/' å '/users'ï¼å°ä½ä¸ºå¯¼å
¥è·¯ç±çåç¼ã妿坼å
¥ç模å users å¨ /profile å®ä¹äºè·¯ç±ï¼åå¯ä»¥å¨ /users/profile 访é®è¯¥è·¯ç±ãæä»¬å°å¨åé¢çæç« ä¸ï¼è¯¦ç»è®¨è®ºè·¯ç±ã
æåä¸ä¸ªä¸é´ä»¶ä¸ºé误å HTTP 404 ååºæ·»å å¤çæ¹æ³ã
// catch 404 and forward to error handler
// æè· 404 å¹¶æç»é误å¤çå¨
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
// é误å¤çå¨
app.use(function (err, req, res, next) {
// set locals, only providing error in development
// 设置 localsï¼åªå¨å¼åç¯å¢æä¾é误信æ¯
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page
// 渲æåºé页é¢
res.status(err.status || 500);
res.render("error");
});
Express åºç¨å¯¹è±¡ï¼appï¼ç°å·²å®æé
ç½®ãæå䏿¥æ¯å°å
¶æ·»å å° exports 模åï¼ä½¿å®å¯ä»¥éè¿ /bin/www 导å
¥ï¼ã
module.exports = app;
è·¯ç±
è·¯ç±ææ¡£ /routes/users.js å¦ä¸æç¤ºï¼ç±äºè·¯ç±æä»¶å使ç¨ç±»ä¼¼ç»æï¼æä»¥ index.js ç¥è¿ä¸è®²ï¼ãé¦å
å è½½ express 模å å¹¶è·å express.Router 对象ï¼å½å为 routerï¼ãç¶å为 router æå®è·¯ç±ï¼æåå¯¼åº routerï¼å°±å¯ä»¥å¯¼å
¥ app.js äºï¼ã
var express = require("express");
var router = express.Router();
/* GET users listing. */
router.get("/", function (req, res, next) {
res.send("respond with a resource");
});
module.exports = router;
该路ç±å®ä¹äºä¸ä¸ªåè°ï¼å¨æ£æµå°æ£ç¡®æ¨¡å¼ç HTTP GET è¯·æ±æ¶å°è°ç¨è¯¥åè°ãæ£ç¡®æ¨¡å¼å³å¯¼å
¥æ¨¡åæ¶æå®çè·¯ç±ï¼'/users'ï¼å 该模åï¼'/'ï¼ä¸å®ä¹çä»»ä½å
å®¹ãæ¢å¥è¯è¯´ï¼å¨æ¶å° /users/ URL æ¶ä½¿ç¨æ¤è·¯ç±ã
夿³¨ï¼ç¨ node å¯å¨è¯¥åºç¨å¹¶è®¿é® http://localhost:3000/users/ï¼æµè§å¨ä¼è¿å䏿¡æ¶æ¯ï¼'respond with a resource'ã
å¼å¾æ³¨æçæ¯ï¼ä¸è¿°åè°å½æ°æç¬¬ä¸ä¸ªåæ° 'next'ï¼å æ¤å®æ¯ä¸ä¸ªä¸é´ä»¶å½æ°ï¼è䏿¯ç®åçè·¯ç±åè°ãnext åæ°ææ¶è¿ç¨ä¸å°ï¼å¨ '/' è·¯å¾ä¸æ·»å å¤ä¸ªè·¯ç±å¤ç卿¶æä¼æ¶åã
è§å¾ï¼æ¨¡æ¿ï¼
è§å¾ï¼æ¨¡æ¿ï¼åä¿åå¨ /views ç®å½ä¸ï¼ app.js 䏿å®ï¼ï¼ä½¿ç¨ .pug æ©å±åã Response.render() æ¹æ³ç¨æå¯¹è±¡çæä¸ªåéå¼ä¸åæ¥æ¸²æä¸ä¸ªç¹å®ç模æ¿ï¼ç¶åå°ç»æä½ä¸ºååºåéãå¨ /routes/index.js ä¸å¯ä»¥çå°ï¼è¯¥è·¯ç±ä½¿ç¨ 'index' 模æ¿åä¸ä¸ªæ¨¡æ¿åé title æ¥æ¸²æååºã
/* GET home page. */
router.get("/", function (req, res) {
res.render("index", { title: "Express" });
});
以䏿¯ä¸æä»£ç 䏿¶åå°ç模æ¿ï¼index.pugï¼ãpug è¯æ³ç¨åå详ç»è®¨è®ºãç°å¨åªéè¦ç¥éï¼title åéå°ä»¥ 'Express' ä½ä¸ºå¼æå
¥æ¨¡æ¿çæå®ä½ç½®ã
extends layout
block content
h1= title
p Welcome to #{title}
ææèªæ
å¨ /routes/users.js 䏿·»å ä¸ä¸ªæ°è·¯ç±ï¼å¨ URL /users/cool/ 夿¾ç¤ºææ¬âä½ å¥½é
·âãè¿è¡æå¡å¨ï¼å¹¶å¨æµè§å¨ä¸è®¿é® http://localhost:3000/users/cool/ï¼æµè¯ä¸ä¸æ¯å¦æåã
å°ç»
ç°å¨ä½ å·²ç»ä¸º æ¬å°å¾ä¹¦é¦ å建好äºéª¨æ¶ï¼å¹¶ä¸æåå¨ node ä¸è¿è¡èµ·æ¥ãåæ¶æéè¦çæ¯ï¼ä½ äºè§£äºé¡¹ç®çç»æï¼ä»èäºè§£äºå¦ä½ä¸ºæ¬å°å¾ä¹¦é¦æ·»å è·¯ç±åè§å¾ã
ä¸ä¸èæä»¬å¼å§ä¿®æ¹éª¨æ¶ï¼è®©å®å ·å¤ä¸äºå¾ä¹¦é¦ç½ç«çåè½ã
åè§
- Express åºç¨ç¨åºçæå¨ï¼Express ææ¡£ï¼
- å°æ¨¡æ¿å¼æç¨äº Expressï¼Express ææ¡£ï¼