Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Node.js¿ª·¢Webºǫ́·þÎñ
 
  3246  次浏览      28
  2018-4-23
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬½éÉÜÁ˴Node.js¿ª·¢»·¾³£¬µÚÒ»¸öNode.js³ÌÐò£¬NPM£¨Node.js°ü¹ÜÀíÆ÷£©£¬ExpressµÈ֪ʶ¡£

Ò»¡¢¼ò½é

Node.js ÊÇÒ»¸ö»ùÓÚGoogle Chrome V8 ÒýÇæµÄ JavaScript ÔËÐл·¾³¡£Node.js ʹÓÃÁËÒ»¸öʼþÇý¶¯¡¢·Ç×èÈûʽ I/O µÄÄ£ÐÍ£¬Ê¹ÆäÇáÁ¿ÓÖ¸ßЧ¡£Node.js µÄ°ü¹ÜÀíÆ÷ npm£¬ÊÇÈ«Çò×î´óµÄ¿ªÔ´¿âÉú̬ϵͳ¡£

ÄÜ·½±ãµØ´î½¨ÏìÓ¦Ëٶȿ졢Ò×ÓÚÀ©Õ¹µÄÍøÂçÓ¦Óã¬Node.js ʹÓÃʼþÇý¶¯£¬ ·Ç×èÈûI/O Ä£ÐͶøµÃÒÔÇáÁ¿ºÍ¸ßЧ£¬·Ç³£ÊʺÏÔÚ·Ö²¼Ê½É豸ÉÏÔËÐеÄÊý¾ÝÃܼ¯Ð͵ÄʵʱӦÓá£

¹ÙÍø£ºhttps://nodejs.org/en/

ÖÐÎÄ£ºhttps://cnodejs.org/¡¢http://nodejs.cn/

API£ºhttp://nodeapi.ucdok.com/#/api/

¼òµ¥ËµNode.js¾ÍÊÇÔËÐÐÔÚ·þÎñÆ÷¶ËµÄJavaScript£¬ÊÇÏÖÔÚÁ÷ÐеÄÓïÑÔÖÐÄÜͬʱÔËÐÐÔÚǰ¶ËÓëºǫ́µÄ³ÌÐòÓïÑÔ£¬Äã¿ÉÒÔ°ÑJavaScriptÏëÏñ³ÉJavaÓëC#¡£Ïà¹Ø¼¼Êõ£º

Êý¾Ý¿â£ºMongoDB£¬·Ç¹ØÏµÐÍÊý¾Ý¿â£¬NoSQL£¨Not only SQL£©

MVC¿ò¼Ü£ºAngularJS

Web·þÎñÆ÷£ºExpress

Ä£°åÒýÇæ£ºjade¡¢ejs¡¢htmljs¡¢swig¡¢hogan.js

¶þ¡¢´î½¨Node.js¿ª·¢»·¾³

2.1¡¢°²×°Node.js

È¥¹ÙÍøÏÂÏÂÔØ×îа汾µÄNode.jsÒ»²½Ò»²½°´Ìáʾ°²×°¼´¿É£¬Èç¹û°²×°Ê§°Ü¾ÍÊÖ¶¯°²×°£¬½«Node.jsµÄ°²×°Î»ÖÃÅäÖõ½»·¾³±äÁ¿µÄpathÖС£

°²×°Íê³ÉºóÆô¶¯ÃüÁîÐУ¬²âÊÔ£º

2.2¡¢°²×°IDE¿ª·¢Node.js²å¼þ

Èç¹û²»Ê¹ÓÃIDE¿ª·¢ÏîĿЧÂʽϵͣ¬ÔںܶàÖ÷Á÷µÄ¼¯³É¿ª·¢»·¾³£¨IDE£©Öж¼¿ÉÒÔ°²×°²å¼þÖ§³ÖNode.js¿ª·¢£¬ÈçEclipse£¬ÕâÀïÎÒÃÇÒÔHBuilderΪÀý£º

Æô¶¯HBuilder->¹¤¾ß->²å¼þ°²×°

°²×°³É¹¦ºó¾Í¿ÉÒÔн¨Node.jsÏîÄ¿ÁË£º

ÕâÀïÑ¡ÔñHello World£¬Ð½¨ºÃµÄÏîÄ¿ÈçÏ£º

hello-world-server.jsÎļþ¾ÍÊÇÒ»¸ö¼òµ¥µÄweb·þÎñÆ÷£¬ÓÒ¼üÑ¡Ôñ¡°ÔËÐз½Ê½¡±->"Node Application"

¿ØÖÆÌ¨Ìáʾ¡°Server running at http://127.0.0.1:1337/¡±ÔÚä¯ÀÀÆ÷²é¿´µÄЧ¹ûÈçÏ£º

Èý¡¢µÚÒ»¸öNode.js³ÌÐò

ÔÚÉÏÃæµÄʾÀýÖУ¬ÎÒÃÇÊÇͨ¹ýIDEÍê³É±àÒëÓëÔËÐе쬯äʵÊÖ¶¯ÔËÐÐÒ²¿ÉÒÔ£¬±ÈÈç±àдһ¶Î´úÂëÈçÏ£º

server.js

//ÒÀÀµÒ»¸öhttpÄ£¿é£¬Ï൱ÓÚjavaÖеÄimport£¬ÓëC#ÖеÄusing

var http = require('http');

//´´½¨Ò»¸ö·þÎñÆ÷¶ÔÏó

server = http.createServer(function (req, res) {

//ÉèÖÃÇëÇó³É¹¦Ê±ÏìӦͷ²¿µÄMIMEΪ´¿Îı¾

res.writeHeader(200, {"Content-Type": "text/plain"});

//Ïò¿Í»§¶ËÊä³ö×Ö·û

res.end("Hello World\n");

});

//È÷þÎñÆ÷¼àÌý±¾µØ8000¶Ë¿Ú¿ªÊ¼ÔËÐÐ

server.listen(8000,'127.0.0.1');

console.log("server is runing at 127.0.0.1:8000");

ÔÚnode»·¾³Ï½âÊÍÔËÐУº

ÔËÐнá¹û£º

ÒýÈë required Ä£¿é£ºÎÒÃÇ¿ÉÒÔʹÓà require Ö¸ÁîÀ´ÔØÈë Node.js Ä£¿é¡£

´´½¨·þÎñÆ÷£º·þÎñÆ÷¿ÉÒÔ¼àÌý¿Í»§¶ËµÄÇëÇó£¬ÀàËÆÓÚTomCat¡¢IIS¡¢Apache ¡¢Nginx µÈ HTTP ·þÎñÆ÷¡£

½ÓÊÕÇëÇóÓëÏìÓ¦ÇëÇó ·þÎñÆ÷ºÜÈÝÒ×´´½¨£¬¿Í»§¶Ë¿ÉÒÔʹÓÃä¯ÀÀÆ÷»òÖÕ¶Ë·¢ËÍ HTTP ÇëÇ󣬷þÎñÆ÷½ÓÊÕÇëÇóºó·µ»ØÏìÓ¦Êý¾Ý¡£

µÚÒ»ÐÐÇëÇó£¨require£©Node.js ×Ô´øµÄ http Ä£¿é£¬²¢ÇÒ°ÑËü¸³Öµ¸ø http ±äÁ¿¡£

½ÓÏÂÀ´ÎÒÃǵ÷Óà http Ä£¿éÌṩµÄº¯Êý£º createServer ¡£Õâ¸öº¯Êý»á·µ»Ø Ò»¸ö¶ÔÏó£¬Õâ¸ö¶ÔÏóÓÐÒ»¸ö½Ð×ö listen µÄ·½·¨£¬Õâ¸ö·½·¨ÓÐÒ»¸öÊýÖµ²ÎÊý£¬ Ö¸¶¨Õâ¸ö HTTP ·þÎñÆ÷¼àÌýµÄ¶Ë¿ÚºÅ¡£

ËÄ¡¢NPM£¨Node.js°ü¹ÜÀíÆ÷£©

NPMÊÇËæÍ¬NodeJSÒ»Æð°²×°µÄ°ü¹ÜÀí¹¤¾ß£¬Äܽâ¾öNodeJS´úÂ벿ÊðÉϵĺܶàÎÊÌ⣬³£¼ûµÄʹÓó¡¾°ÓÐÒÔϼ¸ÖÖ£º

a)¡¢ÔÊÐíÓû§´ÓNPM·þÎñÆ÷ÏÂÔØ±ðÈ˱àдµÄµÚÈý·½°üµ½±¾µØÊ¹Óá£

b)¡¢ÔÊÐíÓû§´ÓNPM·þÎñÆ÷ÏÂÔØ²¢°²×°±ðÈ˱àдµÄÃüÁîÐгÌÐòµ½±¾µØÊ¹Óá£

c)¡¢ÔÊÐíÓû§½«×Ô¼º±àдµÄ°ü»òÃüÁîÐгÌÐòÉÏ´«µ½NPM·þÎñÆ÷¹©±ðÈËʹÓá£

¹ÙÍø£ºhttps://www.npmjs.com/

4.1¡¢²é¿´npm°æ±¾

ÓÉÓÚаæµÄnodejsÒѾ­¼¯³ÉÁËnpm£¬ËùÒÔ֮ǰnpmÒ²Ò»²¢°²×°ºÃÁË¡£Í¬Ñù¿ÉÒÔͨ¹ýÊäÈë "npm -v" À´²âÊÔÊÇ·ñ³É¹¦°²×°¡£ÃüÁîÈçÏ£¬³öÏÖ°æ±¾Ìáʾ±íʾ°²×°³É¹¦:

4.2¡¢Éý¼¶npm

Èç¹ûÄã°²×°µÄÊǾɰ汾µÄ npm£¬¿ÉÒÔºÜÈÝÒ×µÃͨ¹ý npm ÃüÁîÀ´Éý¼¶

npm install npm -g

4.3¡¢°²×°Ä£¿é

npm install <Module Name> -²ÎÊý

Èç¹û´ø²ÎÊý-g±íʾȫ¾Ö°²×°£¬·ñÔòÖ»Êǰ²×°µ½Ä³¸öĿ¼Ï¡£

ÒÔÏÂʵÀý£¬ÎÒÃÇʹÓà npm ÃüÁî°²×°³£ÓÃµÄ Node.js web¿ò¼ÜÄ£¿é express

4.4¡¢Ð¶ÔØÄ£¿é

ÎÒÃÇ¿ÉÒÔʹÓÃÒÔÏÂÃüÁîÀ´Ð¶ÔØ Node.js Ä£¿é¡£

npm uninstall <Module Name>

ÈçÏÈʹÓð²×°Ö¸Áî°²×°bootstrap:

npm install bootstrap

ÔÙʹÓÃÐ¶ÔØÖ¸Áîɾ³ýÄ£¿é£º

npm uninstall bootstrap

¿ÉÒÔµ½ /node_modules/ Ŀ¼Ï²鿴°üÊÇ·ñ»¹´æÔÚ

4.5¡¢Ä£¿éÁбí

ʹÓÃÄ£¿éÁбíÃüÁî¿ÉÒÔ·½±ãµÄ¿´µ½µ±Ç°ÏîÄ¿ÖÐÒÀÀµµÄ°ü£º

npm ls

4.6¡¢¸üÐÂÄ£¿é

ÎÒÃÇ¿ÉÒÔʹÓÃÒÔÏÂÃüÁî¸üÐÂÄ£¿é£º

npm update Ä£¿éÃû³Æ

npm up -g Ä£¿éÃû³Æ

4.7¡¢ËÑË÷Ä£¿é

npm search Ä£¿éÃû³Æ

4.8¡¢NPM ³£ÓÃÃüÁî

³ýÁ˱¾Õ½éÉܵIJ¿·ÖÍ⣬NPM»¹ÌṩÁ˺ܶ๦ÄÜ£¬package.jsonÀïÒ²ÓкܶàÆäËüÓÐÓõÄ×ֶΡ£

³ýÁË¿ÉÒÔÔÚnpmjs.org/doc/²é¿´¹Ù·½ÎĵµÍ⣬ÕâÀïÔÙ½éÉÜһЩNPM³£ÓÃÃüÁî¡£

NPMÌṩÁ˺ܶàÃüÁÀýÈçinstallºÍpublish£¬Ê¹ÓÃnpm help¿É²é¿´ËùÓÐÃüÁî¡£

NPMÌṩÁ˺ܶàÃüÁÀýÈçinstallºÍpublish£¬Ê¹ÓÃnpm help¿É²é¿´ËùÓÐÃüÁî¡£

ʹÓÃnpm help <command>¿É²é¿´Ä³ÌõÃüÁîµÄÏêϸ°ïÖú£¬ÀýÈçnpm help install¡£

ÔÚpackage.jsonËùÔÚĿ¼ÏÂʹÓÃnpm install . -g¿ÉÏÈÔÚ±¾µØ°²×°µ±Ç°ÃüÁîÐгÌÐò£¬¿ÉÓÃÓÚ·¢²¼Ç°µÄ±¾µØ²âÊÔ¡£

ʹÓÃnpm update <package>¿ÉÒ԰ѵ±Ç°Ä¿Â¼ÏÂnode_modules×ÓĿ¼Àï±ßµÄ¶ÔӦģ¿é¸üÐÂÖÁ×îа汾¡£

ʹÓÃnpm update <package> -g¿ÉÒÔ°ÑÈ«¾Ö°²×°µÄ¶ÔÓ¦ÃüÁîÐгÌÐò¸üÐÂÖÁ×îа档

ʹÓÃnpm cache clear¿ÉÒÔÇå¿ÕNPM±¾µØ»º´æ£¬ÓÃÓÚ¶Ô¸¶Ê¹ÓÃÏàͬ°æ±¾ºÅ·¢²¼Ð°汾´úÂëµÄÈË¡£

ʹÓÃnpm unpublish <package>@<version>¿ÉÒÔ³·Ïú·¢²¼×Ô¼º·¢²¼¹ýµÄij¸ö°æ±¾´úÂë¡£

4.9¡¢¸ü»»NPM ¾µÏñ

ÒòΪnpmµÄ·þÎñÆ÷ÔÚ¹úÍ⣬ÔÚÍøÂç״̬²»ºÃµÄÇé¿öÏÂÒýÈëÒ»¸öÄ£¿é»áÒòÎªÍøÂçÑÓ³Ù¶øÊ§°Ü£¬¿ÉÒÔ¸ü»»³É¹úÄÚËٶȸü¿ìµÄ¾µÏñ·þÎñÆ÷£¬ÕâÀïÒÔʹÓÃÌÔ±¦ NPM ¾µÏñ£¨http://npm.taobao.org/£©ÎªÀý£º

npm install -g cnpm --registry=https://registry.npm.taobao.org

ÕâÑù¾Í¿ÉÒÔʹÓà cnpm ÃüÁîÀ´°²×°Ä£¿éÁË£º

¡ç cnpm install [name]

ÕâÊÇÒ»¸öÍêÕû npmjs.org ¾µÏñ£¬Äã¿ÉÒÔÓô˴úÌæ¹Ù·½°æ±¾(Ö»¶Á)£¬Í¬²½ÆµÂÊĿǰΪ 10·ÖÖÓ Ò»´ÎÒÔ±£Ö¤¾¡Á¿Óë¹Ù·½·þÎñͬ²½¡£

ÈçÊǰ²×°Ê§°Ü£¬¿ÉÒÔÊÔÊÔ£º

alias cnpm = "npm --registry = https: // registry.npm .taobao .org \
--cache = $HOME /.npm /.cache/cnpm \
--disturl = https: //npm.taobao.org/dist \
--userconfig = $HOME/.cnpmrc"
# Or alias it in .bashrc or .zshrc
$ echo '\ n#alias for cnpm\nalias cnpm = "npm --registry = https://registry.npm.taobao.org \
--cache = $HOME/.npm/.cache /cnpm \
--disturl = https: //npm.taobao.org /dist \
--userconfig = $HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc

Îå¡¢Express

Express ÊÇÒ»¸ö¼ò½à¶øÁé»îµÄ node.js WebÓ¦Óÿò¼Ü, ÌṩÁËһϵÁÐÇ¿´óÌØÐÔ°ïÖúÄã´´½¨¸÷ÖÖ Web Ó¦Ó㬺ͷḻµÄ HTTP ¹¤¾ß¡£

ʹÓà Express ¿ÉÒÔ¿ìËٵشһ¸öÍêÕû¹¦ÄܵÄÍøÕ¾¡£Ê¹ÓÃNode.js×÷ΪAngularJS¿ª·¢Web·þÎñÆ÷µÄ×î¼Ñ·½Ê½ÊÇʹÓÃExpressÄ£¿é¡£

Express¹ÙÍø£º http://expressjs.com/

Express4.x API£ºhttp://expressjs.com/zh-cn/4x/api.html

5.2¡¢Express¿ò¼ÜºËÐÄÌØÐÔ

¿ÉÒÔÉèÖÃÖмä¼þÀ´ÏìÓ¦ HTTP ÇëÇó¡£

¶¨ÒåÁË·ÓɱíÓÃÓÚÖ´Ðв»Í¬µÄ HTTP ÇëÇó¶¯×÷¡£

¿ÉÒÔͨ¹ýÏòÄ£°å´«µÝ²ÎÊýÀ´¶¯Ì¬äÖȾ HTML Ò³Ãæ¡£

·á¸»µÄ HTTP ¿ì½Ý·½·¨ºÍÈÎÒâÅÅÁÐ×éºÏµÄ Connect Öмä¼þ£¬ÈÃÄã´´½¨½¡×³¡¢ÓÑºÃµÄ API ±äµÃ¼È¿ìËÙÓÖ¼òµ¥¡£

Express ²»¶Ô Node.js ÒÑÓеÄÌØÐÔ½øÐжþ´Î³éÏó£¬ÎÒÃÇÖ»ÊÇÔÚËüÖ®ÉÏÀ©Õ¹ÁË Web Ó¦ÓÃËùÐèµÄ»ù±¾¹¦ÄÜ¡£

5.3¡¢°²×° Express

°²×° Express ²¢½«Æä±£´æµ½ÒÀÀµÁбíÖУº

npm install express --save

ÒÔÉÏÃüÁîÈ«¾Ö°²×°express¡£Ò²¿É°²×°Ê±Ö¸¶¨°²×°Öмä¼þ¡£

body-parser - node.js Öмä¼þ£¬ÓÃÓÚ´¦Àí JSON, Raw, Text ºÍ URL ±àÂëµÄÊý¾Ý¡£

cookie-parser - Õâ¾ÍÊÇÒ»¸ö½âÎöCookieµÄ¹¤¾ß¡£Í¨¹ýreq.cookies¿ÉÒÔÈ¡µ½´«¹ýÀ´µÄcookie£¬²¢°ÑËüÃÇת³É¶ÔÏó¡£

multer - node.js Öмä¼þ£¬ÓÃÓÚ´¦Àí enctype="multipart/form-data"£¨ÉèÖÃ±íµ¥µÄMIME±àÂ룩µÄ±íµ¥Êý¾Ý¡£

¡ç npm install body-parser --save

¡ç npm install cookie-parser --save

¡ç npm install multer --save

ĬÈÏÕâЩģ¿é¶¼ÒѾ­Ìí¼Ó¡£

5.4¡¢µÚÒ»¸öExpress¿ò¼ÜʵÀý

½ÓÏÂÀ´ÎÒÃÇʹÓà Express ¿ò¼ÜÀ´Êä³ö "Hello World"¡£

ÒÔÏÂʵÀýÖÐÎÒÃÇÒýÈëÁË express Ä£¿é£¬²¢ÔÚ¿Í»§¶Ë·¢ÆðÇëÇóºó£¬ÏìÓ¦ "Hello World" ×Ö·û´®¡£

´´½¨Ò»¸öĿ¼£¬ÈçProject£¬½øÈëÃüÁîÐУº

ʹÓÃnpm install express µ¼ÈëexpressÄ£¿é¡£

ÔÚĿ¼Ï´´½¨hello.jsÎļþ£¬ÈçÏÂËùʾ£º

//ÒýÈëexpressÄ£¿é
var express = require('express');
//´´½¨Ò»¸öapp¶ÔÏó£¬ÀàËÆÒ»¸öweb Ó¦Óã¨ÍøÕ¾£©
var app = express();
//½ÓÊÜÖ¸¶¨Â·¾¶µÄÇëÇó£¬Ö¸¶¨»Øµ÷º¯Êý
app.get('/', function (req, res){
res.send('Hello World');
});
//´´½¨Ò»¸öweb·þÎñÆ÷£¬¿ÉÒÔÈÏΪ¾ÍÊÇweb·þÎñÆ÷¶ÔÏó
//¼àÌý8081¶Ë¿Ú£¬µ±¼àÌý³É¹¦Ê±»Øµ÷
var server = app.listen(8081, function () {
var host = server.address().address; //µØÖ·
var port = server.address().port; //¶Ë¿Ú
console.log("Ó¦ÓÃʵÀý£¬·ÃÎʵØÖ·Îª http://%s:%s", host, port);
});
})

ʹÓÃnodeÖ´ÐÐjs£º

ÔËÐнá¹û£º

5.5¡¢Ê¹ÓÃNodeclipse¿ª·¢ExpressÏîÄ¿

Èç¹ûÖ±½ÓʹÓüÇʱ¾Ð§Âʻ᲻¸ß£¬nodeclipse²å¼þ¿ÉÒÔ·½±ãµÄ´´½¨Ò»¸öExpressÏîÄ¿£¬²½ÖèÈçÏ£º

´´½¨ºÃµÄÏîÄ¿ÈçÏ£º

app.jsÊÇÍøÕ¾£º

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
//Ö¸¶¨ÊÓͼÒýÇæÎªejs
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
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');
});
module.exports = app;

bin\wwwÊÇweb·þÎñÆ÷£º

#!/usr/bin/env node
/**
* ÒÀÀµÄ£¿é£¬µ¼Èë
*/
var app = require('../app');
var debug = require('debug')('nodejsexpress:server');
var http = require('http');
/**
* ´ÓÉÏÏÂÎÄ»·¾³ÖлñµÃ¼àÌý¶Ë¿Ú£¬Èç¹û¿ÕÔò3000
*/
var port = normalizePort (process.env.PORT || '3000');
app.set('port', port);
/**
* ´´½¨Web·þÎñÆ÷
*/
var server = http.createServer(app);
/**
* ¿ªÊ¼¼àÌý
*/
server.listen(port);
server.on('error', onError); //Ö¸¶¨·¢Éú´íÎóʱµÄʼþ
server.on('listening', onListening); //µ±¼àÌý³É¹¦Ê±µÄ»Øµ÷
/**
* ¹æ·¶»¯¶Ë¿Ú
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
*´íÎóʼþ¼àÌý
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
'Pipe ' + port
: 'Port ' + port;
//´íÎó´¦Àí
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1); //½áÊø³ÌÐò
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* µ±Óû§·ÃÎÊ·þÎñÆ÷³É¹¦Ê±µÄ»Øµ÷
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

routers/index.js·ÓÉ£¬ÓеãÀàËÆ¿ØÖÆÆ÷»òServlet£º

var express = require('express');
var router = express.Router();
/* »ñµÃÊ×Ò³ */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;

views/index.ejsÊ×Ò³ÊÓͼ£º

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>

ÔÚwwwÉÏÓÒ¼üÑ¡Ôñ¡°ÔËÐз½Ê½¡±->¡°Node Application¡±ÔËÐнá¹û£º

5.6¡¢ejs»ù´¡

ejsÊÇÒ»¸öExpress WebÓ¦ÓõÄÄ£°åÒýÇæ£¬ÔÚNodeJS¿ª·¢ÖпÉÒÔÑ¡ÔñµÄÄ£°åÒýÇæ¿ÉÄÜÊÇËùÓÐWebÓ¦Óÿª·¢Öз¶Î§×î¹ãµÄ£¬Èçjade¡¢ejs¡¢htmljs¡¢swig¡¢hogan.js£¬µ«ejsÊÇ×îÈÝÒ×ÉÏÊֵģ¬Óëjsp,asp,phpµÄԭʼģ°åÒýÇæ·ç¸ñºÜÏñ¡£

¹ÙÍø£ºhttp://www.embeddedjs.com/

Ìí¼ÓÒ»¸öproduct.js·ÓÉ£º

var express = require('express');
var router = express.Router(); /* ²úÆ· */
router.get('/', function(req, res, next) {
var products=[];
products.push({name:"ZTE U880",price:899.8});
products.push({name:"HuWei ÈÙÒ«8",price:1899.8});
products.push({name:"iPhone 7 Plus 128G",price:5899.8});
//½«productÊÓͼÓëÖ¸¶¨µÄ¶ÔÏóäÖȾºóÊä³öµ½¿Í»§¶Ë
res.render('product', { title: 'Ìì¹·É̳Ç', pdts:products});
});
module.exports = router;

ÔÚviewsĿ¼ÏÂÌí¼Óproduct.ejsÊÓͼ£¬ÕâÀïÊÇÒ»¸ö¼òµ¥µÄMVC£º

<!DOCTYPE html>
<html>
<head>
<title>
<%= title %>
</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %> - ²úÆ·Áбí</h1>
<table border="1" width="80%">
<tr>
<th>ÐòºÅ</th>
<th>Ãû³Æ</th>
<th>¼Û¸ñ</th>
</tr>
<%pdts.forEach(function(pdt,index){%>
<tr>
<td>
<%=index+1%>
</td>
<td>
<%=pdt.name%>
</td>
<td>
<%=pdt.price%>
</td>
</tr>
<%});%>
</table>
<ul>
<% for(var i=0; i<pdts.length; i++) {%>
<li>
<%=pdts[i].name%>
</li>
<% } %>
</body>
</html>

ÐÞ¸Äapp£¬×¢²á¶¨ÒåºÃµÄÄ£¿éproduct£º

var index = require('./routes/index');
var users = require('./routes/users');
var pdts = require('./routes/product');
var app = express();
//Ö¸¶¨ÊÓͼÒýÇæÎªejs
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
app.use('/pdt', pdts);

ÔËÐнá¹û£º

5.7¡¢lodash

ÕâÊÇÒ»¸ö¾ßÓÐÒ»Ö½ӿڡ¢Ä£¿é»¯¡¢¸ßÐÔÄܵÈÌØÐ﵀ JavaScript ¹¤¾ß¿â¡£¿ÉÒԷdz£·½±ãµÄ²Ù×÷json¡£

¹ÙÍø£ºhttp://lodashjs.com/

°²×°£º

npm i -g npm

npm i --save lodash

°²×°Ê±ÏÈÓÃcdÇл»µ½µ±Ç°ÏîĿϡ£

Èç¹ûä¯ÀÀÆ÷ʹÓÿÉÒÔÖ±½ÓÒýÈ룺

<script src="lodash.js"></script>

Ìí¼ÓlodashÒÀÀµ£º

ÒÀÀµ³É¹¦ºó»áÔÚpackage.jsonÖÐÌí¼ÓÒýÓãº

ºǫ́Node.jsʹÓ㬿ÉÒÔÒýÈëÄ£¿é£º

//µ¼ÈëlodashÄ£¿é
var _= require('lodash');
var products=[];
products.push({name:"ZTE U880",price:899.8});
products.push({name:"HuWei ÈÙÒ«8",price:1899.8});
products.push({name:"iPhone 7 Plus 128G",price:5899.8});
//1¡¢È¡³öµÚÒ»¸öÔªËØ
var obj1=_.first(products);
console.log(obj1.name); //ZTE U880
//2¡¢È¡³ö×îºóÒ»¸öÔªËØ
var obj2=_.last(products);
console.log(obj2.name); //iPhone 7 Plus 128G
//3¡¢Ö¸¶¨²éÕÒÌõ¼þ·µ»Ø·ûºÏÌõ¼þµÄË÷Òý
var obj3=_.findIndex(products,function(obj){
return obj.price>=1000&&obj.name.indexOf("7")>0;
});
console.log(obj3); //2
//4¡¢Ö¸¶¨²éÕÒÌõ¼þ·µ»Ø²éÕÒµ½µÄ¶ÔÏó
var obj4=_.find(products,function(obj){
return obj.price>=1000&&obj.name.indexOf("7")>0;
});
console.log(obj4); //{ name: 'iPhone 7 Plus 128G', price: 5899.8 }
//5¡¢ÅÅÐò
var obj5=_.orderBy(products,["price","name"],["desc","asc"]);
console.log(obj5);
//[ { name: 'iPhone 7 Plus 128G', price: 5899.8 },
//{ name: 'HuWei ÈÙÒ«8', price: 1899.8 },
//{ name: 'ZTE U880', price: 899.8 } ]
//6¡¢²éÕÒ¼Û¸ñΪ1899.8µÄ²úÆ·µÄkey
var obj6=_.findKey(products,{price:1899.8});
console.log(obj6); //1

APIµÄʹÓ÷dz£¼òµ¥£¬µ«ÐèҪעÒâ°æ±¾£¬¿ÉÒÔÏÖ²éÏÖÓã¬APIµØÖ·£ºhttps://lodash.com/docs/4.17.2

5.8¡¢²ÎÊý

5.8.1¡¢URLÖеIJÎÊýռλ

Checks route params (req.params), ex: /user/:id

127.0.0.1:3000/index£¬ÕâÖÖÇé¿öÏ£¬ÎÒÃÇΪÁ˵õ½index£¬ÎÒÃÇ¿ÉÒÔͨ¹ýʹÓÃreq.paramsµÃµ½£¬Í¨¹ýÕâÖÖ·½·¨ÎÒÃǾͿÉÒԺܺõĴ¦ÀíNodeÖеÄ·ÓÉ´¦ÀíÎÊÌ⣬ͬʱÀûÓÃÕâµã¿ÉÒԷdz£·½±ãµÄʵÏÖMVCģʽ£»

//»ñµÃ²úÆ·¸ù¾ÝId
router.get('/:id/:category',function(request,res,next){
res.send(request.params.id+","+request.params.category);
});

ÔËÐнá¹û£º

5.8.2¡¢URLÖеÄQueryString

Checks query string params (req.query), ex: ?id=12

127.0.0.1:3000/index?id=12£¬ÕâÖÖÇé¿öÏ£¬ÕâÖÖ·½Ê½ÊÇ»ñÈ¡¿Í»§¶Ëget·½Ê½´«µÝ¹ýÀ´µÄÖµ£¬Í¨¹ýʹÓÃreq.query.id¾Í¿ÉÒÔ»ñµÃ£¬ÀàËÆÓÚPHPµÄget·½·¨£»

router.get('/:id',function(request,res,next){
res.send("name:"+request.query.name);
});

ÔËÐнá¹û£º

5.8.3¡¢HTTPÕýÎÄÖеIJÎÊý

ÔÚpostÇëÇóÖлñµÃ±íµ¥ÖеÄÊý¾Ý¡£

Checks urlencoded body params (req.body), ex: id=

127.0.0.1£º300/index£¬È»ºópostÁËÒ»¸öid=2µÄÖµ£¬ÕâÖÖ·½Ê½ÊÇ»ñÈ¡¿Í»§¶Ëpost¹ýÀ´µÄÊý¾Ý£¬¿ÉÒÔͨ¹ýreq.body.id»ñÈ¡£¬ÀàËÆÓÚPHPµÄpost·½·¨£»

Ò³Ãæ£º

<!DOCTYPE html>
<html>
<head>
<title>
<%= title %>
</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %> - ²úÆ·Áбí</h1>
<table border="1" width="80%">
<tr>
<th>ÐòºÅ</th>
<th>Ãû³Æ</th>
<th>¼Û¸ñ</th>
</tr>
<%pdts.forEach(function(pdt,index){%>
<tr>
<td>
<%=index+1%>
</td>
<td>
<%=pdt.name%>
</td>
<td>
<%=pdt.price%>
</td>
</tr>
<%});%>
</table>
<ul>
<% for(var i=0; i<pdts.length; i++) {%>
<li>
<%=pdts[i].name%>
</li>
<% } %>
</ul>
<p>
<%if(typeof msg!="undefined"){%>
<%=msg%>
<%}%>
</p>
<form action="pdt/add" method="post">
<p>
Ãû³Æ£º<input name="name" />
</p>
<p>
¼Û¸ñ£º<input name="price" />
</p>
<button>Ìí¼Ó</button>
</form>
</body>
</html>

´úÂ룺

router.post('/add',function(request,res,next){
var entity={name:request.body.name,price:request.body.price};
products.push(entity);
//½«productÊÓͼÓëÖ¸¶¨µÄ¶ÔÏóäÖȾºóÊä³öµ½¿Í»§¶Ë
res.render('product', { title: 'Ìì¹·É̳Ç', pdts:products,msg:"Ìí¼Ó³É¹¦"});
});

½á¹û£º

5.9¡¢JSON

Èç¹ûÐèÒªNode.jsÏòÍâÌṩ·µ»ØJSONµÄ½Ó¿Ú£¬ExpressÒ²ÊǷdz£·½±ãµÄ£¬¿ÉÒÔʹÓÃÔ­À´ÔÚä¯ÀÀÆ÷ÖÐʹÓõ½µÄJSON¶ÔÏó£¬ÕâÊÇÒ»¸öä¯ÀÀÆ÷ÄÚÖöÔÏóÔÚ·þÎñ¿ÉÒÔÖ±½ÓʹÓãº

½«¶ÔÏóÐòÁл¯³É×Ö·û£º

//¶ÔÏó
var rose={"name":"Rose","weight":"65"};
//ÐòÁл¯³É×Ö·û´®
var str=JSON.stringify(rose);
alert(str);

½á¹û£º

·´ÐòÁл¯£¬½«×Ö·ûת»»³É¶ÔÏó£º

//½«×Ö·û´®×ª»»³ÉJavaScript¶ÔÏó
var markStr='{"name":"mark","weight":"188"}';
var mark=JSON.parse(markStr);
alert(mark.name+"£¬"+mark.weight);

½á¹û£º

ExpressÒѾ­·â×°ÁËÒ»¸öjson·½·¨£¬Ö±½Óµ÷Óø÷½·¨¾Í¿ÉÒÔÐòÁл¯¶ÔÏó£º

/* ²úÆ· */
router.get('/rest', function(req, res, next) {
res.json(products);
});

ÔËÐнá¹û£º

Áù¡¢RESTful£¨±íÊöÐÔ×´Ì¬×ªÒÆ£©

RESTÊÇÓ¢ÎÄRepresentational State TransferµÄËõд£¬ÖÐÎijÆÖ®Îª¡°±íÊöÐÔ×´Ì¬×ªÒÆ¡±

»ùÓÚHTTPЭÒé

ÊÇÁíÒ»ÖÖ·þÎñ¼Ü¹¹

´«µÝÊÇJSON¡¢POX£¨Plain Old XML£©¶ø²»ÊÇSOAP¸ñʽµÄÊý¾Ý

³ä·ÖÀûÓÃHTTPν´Ê£¨Verb£©

²àÖØÊý¾ÝµÄ´«Ê䣬ҵÎñÂß¼­½»¸ø¿Í»§¶Ë×ÔÐд¦Àí

RESTÊÇÒ»ÖÖ·Ö²¼Ê½·þÎñ¼Ü¹¹µÄ·ç¸ñÔ¼Êø£¬ÏñJava¡¢.Net£¨WCF¡¢WebAPI£©¶¼ÓжԸÃÔ¼ÊøµÄʵÏÖ£¬Ê¹URL±äµÃ¸ü¼ÓÓÐÒâÒ壬¸ü¼Ó¼ò½àÃ÷ÁË£¬È磺

http://www.zhangguo.com/products/1 getÇëÇó ±íʾ»ñµÃËùÓвúÆ·µÄµÚ1¸ö

http://www.zhangguo.com/products/product postÇëÇó ±íʾÌí¼ÓÒ»¸ö²úÆ·

http://www.zhangguo.com/products/1/price getÇëÇó ±íʾ»ñµÃµÚ1¸ö²úÆ·µÄ¼Û¸ñ

http://www.zhangguo.com/products/1 deleteÇëÇó ɾ³ý±àºÅΪ1µÄ²úÆ·

RESTÉè¼ÆÐèÒª×ñÑ­µÄÔ­Ôò

ÍøÂçÉϵÄËùÓÐÊÂÎï¶¼±»³éÏóΪ×ÊÔ´£¨resource£©£»

ÿ¸ö×ÊÔ´¶ÔÓ¦Ò»¸öΨһµÄ×ÊÔ´±êʶ·û£¨resource identifier£©£»

ͨ¹ýͨÓõÄÁ¬½ÓÆ÷½Ó¿Ú£¨generic connector interface£©¶Ô×ÊÔ´½øÐвÙ×÷£»

¶Ô×ÊÔ´µÄ¸÷ÖÖ²Ù×÷²»»á¸Ä±ä×ÊÔ´±êʶ·û£»

ËùÓеIJÙ×÷¶¼ÊÇÎÞ״̬µÄ£¨stateless£©

ν´Ê

GET

±íʾ²éѯ²Ù×÷£¬Ï൱ÓÚRetrieve¡¢Select²Ù×÷

POST

±íʾ²åÈë²Ù×÷£¬Ï൱ÓÚCreate£¬Insert²Ù×÷

PUT

±íʾÐ޸IJÙ×÷£¬Ï൱ÓÚUpdate²Ù×÷

DELETE

±íʾɾ³ý²Ù×÷£¬Ï൱ÓÚDelete²Ù×÷

ÆäËü»¹ÓУº

NodeJS+Express¿ÉÒÔºÜÈÝÒ×µÄʵÏÖREST

application/x-www-form-urlencoded

multipart/form-data

application/json

res.setHeader('Content-Type', 'application/json;charset=utf-8');

ʾÀý´úÂëcars.js£º

var express = require('express');
var router = express.Router();
var _= require('lodash');
var cars=[];
cars.push({ id:201701,name :"BMW",price :190,speed :"210km /h", color :"°×É«"});
cars.push ({id :201702,name :"BYD",price :25,speed :"160km/ h",color :"ºìÉ«"});
cars.push ({id:201703,name:"Benz", price: 300,speed :"215km /h",color :"À¶É«"});
cars.push ({id:201704, name:"Honda" ,price:190, speed:"170km /h",color : "ºÚÉ«"});
cars.push ({id:201705, name :"QQ",pric e:130,speed:"210km /h", color :"°×É«"});
/* Get */
/*»ñµÃËùÓÐÆû³µ*/
/*url /cars/*/
router.get('/', function(req, res, next) {
res.json(cars);
});
/*Get*/
/*»ñµÃÆû³µÍ¨¹ýid*/
/*url£º/cars/:id */
router.get('/:id', function(req, res, next) {
//´Ó·¾¶ÖÐÓ³Éä²ÎÊý£¬×ª»»³ÉÊý×Ö
var id=parseInt(req.params.id);
var car=_.find(cars,{id:id});
res.json(car);
});
/*Post*/
/*Ìí¼ÓÆû³µ*/
/*url£º/cars/car */
router.post('/car', function(req, res, next) {
var car=req.body; //´ÓÇëÇóÕýÎÄÖлñµÃjson¶ÔÏó
car.id=_.last(cars).id+1; //½«±àºÅÐÞ¸ÄΪ×îºóÒ»Á¾³µµÄ±àºÅ+1
cars.push(car); //½«Æû³µ¶ÔÏóÌí¼Óµ½¼¯ºÏÖÐ
res.json(car); //½«Ìí¼Ó³É¹¦µÄ³µÒÔjsonµÄÐÎʽ·µ»Ø
});
/*Put*/
/*ÐÞ¸ÄÆû³µ*/
/*url£º/cars/car */
router.put('/car', function(req, res, next) {
var car=req.body; //´ÓÇëÇóÕýÎÄÖлñµÃjson¶ÔÏó
console.log(req.body);
var index=_.findIndex(cars,{id:parseInt(car.id)}); //¸ù¾Ýid»ñµÃ³µÔÚ¼¯ºÏÖеÄϱê
cars[index]=car; //Ìæ»»Ô­¶ÔÏó
//res.json(car); //½«Ð޸ĺóµÄ³µÒÔjsonµÄÐÎʽ·µ»Ø
res.send({status:"success", message:"¸üгɹ¦!"});
});
/*Delete*/
/*ɾ³ýÆû³µ*/
/*url£º/cars/:id */
router.delete('/id/:id', function(req, res, next) {
//»ñµÃurlÖеıàºÅ²ÎÊý
var id=parseInt(req.params.id);
var index=_.findIndex(cars,{id:id}); //¸ù¾Ýid»ñµÃ³µÔÚ¼¯ºÏÖеÄϱê
cars.splice(index,1); //ÔÚcarsÊý×éÖÐɾ³ýϱê´Óindex¿ªÊ¼µÄ1ÌõÊý¾Ý
res.send({status:"success", message:"ɾ³ý³É¹¦!"});
});
module.exports = router;
>

ʾÀý´úÂëapp.js£º

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');
var pdts = require('./routes/product');
var task = require('./routes/task');
var cars = require('./routes/cars');
var app = express();
//Ö¸¶¨ÊÓͼÒýÇæÎªejs
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
app.use('/pdt', pdts);
app.use("/task",task);
app.use("/cars",cars);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
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');
});
module.exports = app;

/* Get */

/*»ñµÃËùÓÐÆû³µ*/

/*url /cars/*/

/*Get*/

/*»ñµÃÆû³µÍ¨¹ýid*/

/*url£º/cars/:id */

/*Post*/

/*Ìí¼ÓÆû³µ*/

/*url£º/cars/car */

²ÎÊýÖеÄjson¸ñʽһ¶¨ÒªÊ¹Óñê×¼¸ñʽ£¬×¢ÒâÒýºÅ£¬×¢ÒâContent-Type£¬Ä¬ÈϵÄContent-TypeÀàÐÍÊÇ£ºapplication/x-www-form-urlencoded

/*Put*/

/*ÐÞ¸ÄÆû³µ*/

/*url£º/cars/car */

/*Delete*/

/*ɾ³ýÆû³µ*/

/*url£º/cars/:id */

node.js¿çÓò

ÐÞ¸Äapp.jsÎļþÀ¹½ØËùÓеÄÇëÇó£¬ÐÞ¸ÄÍ·²¿

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "content-type");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
if(req.method == "OPTIONS") {
res.send("200");
} else {
next();
}
});

½á¹û£º

Æß¡¢Ê¾ÀýÏÂÔØ

git£ºhttps://coding.net/u/zhangguo5/p/NodeJS001/git

git£ºhttps://coding.net/u/zhangguo5/p/NodeJSExpress/git

 

   
3246 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì