{"id":7983,"date":"2016-10-10T15:59:43","date_gmt":"2016-10-10T07:59:43","guid":{"rendered":"http:\/\/jpuyy.com\/?p=7983"},"modified":"2016-10-10T15:59:43","modified_gmt":"2016-10-10T07:59:43","slug":"nodejs","status":"publish","type":"post","link":"https:\/\/jpuyy.com\/?p=7983","title":{"rendered":"nodejs"},"content":{"rendered":"<div>node 04<\/div>\n<div><\/div>\n<div><\/div>\n<div>Modules<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>Semantic Versioning<\/div>\n<div><\/div>\n<div><\/div>\n<div>version patch<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 &#8220;connect&#8221;: &#8220;~2.2.1&#8221;,<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 &#8220;underscore&#8221;: &#8220;~1.3.3\u201d<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>node 03<\/div>\n<div><\/div>\n<div><\/div>\n<div>streams<\/div>\n<div><\/div>\n<div><\/div>\n<div>curl &#8211;upload-file abc.jpg http:\/\/localhost:3000<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>node 01<\/div>\n<div><\/div>\n<div><\/div>\n<div>fs.readFileSync<\/div>\n<div><\/div>\n<div><\/div>\n<div>fs.readFile(&#8216;\/etc\/hosts&#8217;, function(){});<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>setTimeout(function(){ console.log(&#8220;here we go&#8221;)}, 5000); \/\/ \u7b49 5000ms \u518d\u8fd0\u884c function<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>non-blocking<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>epxress 05<\/div>\n<div><\/div>\n<div><\/div>\n<div>route instances<\/div>\n<div><\/div>\n<div><\/div>\n<div>app.route()<\/div>\n<div><\/div>\n<div><\/div>\n<div>chaining function<\/div>\n<div><\/div>\n<div><\/div>\n<div>single application file is too long<\/div>\n<div><\/div>\n<div><\/div>\n<div>extracting routes to modules<\/div>\n<div><\/div>\n<div><\/div>\n<div>var router = express.Router();<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>set router as a express module<\/div>\n<div><\/div>\n<div><\/div>\n<div>module.exports = router;<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>var router = express.Router();<\/div>\n<div><\/div>\n<div>router.route(&#8216;\/&#8217;);<\/div>\n<div><\/div>\n<div>app.use(&#8216;\/cities&#8217;, router);<\/div>\n<div><\/div>\n<div><\/div>\n<div>router.route(&#8216;\/&#8217;)<\/div>\n<div><\/div>\n<div>\u00a0 .get(function (request, response) {<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 if(request.query.search){<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.json(citySearch(request.query.search));<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }else{<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.json(cities);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }<\/div>\n<div><\/div>\n<div>\u00a0 })<\/div>\n<div><\/div>\n<div><\/div>\n<div>\u00a0 .post(parseUrlencoded, function (request, response) {<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 if(request.body.description.length &gt; 4){<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 var city = createCity(<a href=\"http:\/\/request.body.name\/\">request.body.name<\/a>, request.body.description);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.status(201).json(city);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }else{<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.status(400).json(&#8216;Invalid City&#8217;);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }<\/div>\n<div><\/div>\n<div>\u00a0 });<\/div>\n<div><\/div>\n<div><\/div>\n<div>router.route(&#8216;\/:name&#8217;)<\/div>\n<div><\/div>\n<div>\u00a0 .get(function (request, response) {<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 var cityInfo = cities[request.cityName];<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 if(cityInfo){<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.json(cityInfo);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }else{<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.status(404).json(&#8220;City not found&#8221;);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }<\/div>\n<div><\/div>\n<div>\u00a0 })<\/div>\n<div><\/div>\n<div><\/div>\n<div>\u00a0 .delete(function (request, response) {<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 if(cities[request.cityName]){<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 delete cities[request.cityName];<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.sendStatus(200);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }else{<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0 response.sendStatus(404);<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 }<\/div>\n<div><\/div>\n<div>\u00a0 });<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>What function would you call to match all HTTP verbs?<\/div>\n<div><\/div>\n<div>app.all()<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>express 04<\/div>\n<div><\/div>\n<div><\/div>\n<div>post &amp; delete<\/div>\n<div><\/div>\n<div><\/div>\n<div>body-parser<\/div>\n<div><\/div>\n<div><\/div>\n<div>app.delete(&#8216;\/blocks\/:name&#8217;, function(request, response){});<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>response.sendStatus(200);<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>express 03<\/div>\n<div><\/div>\n<div><\/div>\n<div>handle routes<\/div>\n<div><\/div>\n<div><\/div>\n<div>response.json();<\/div>\n<div><\/div>\n<div><\/div>\n<div>\/blocks?limit=1<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>use request.query to access query strings<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>blocks.slice(1, 3)\u00a0 from 1 , 3 items<\/div>\n<div><\/div>\n<div><\/div>\n<div><a href=\"http:\/\/request.params.name\/\">request.params.name<\/a><\/div>\n<div><\/div>\n<div><\/div>\n<div>response.status(404).json(&#8216;No description found for &#8216; + <a href=\"http:\/\/request.params.name\/\">request.params.name<\/a>)<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>maps placeholders to callback functions, and is commonly used for running pre-conditions on Dynamic Routes<\/div>\n<div><\/div>\n<div>app.param(&#8216;name&#8217;, function(request, response, next){<\/div>\n<div><\/div>\n<div>});<\/div>\n<div><\/div>\n<div><\/div>\n<div>javascript<\/div>\n<div><\/div>\n<div><\/div>\n<div>array -&gt; \u00a0 blocks = [&#8216;Fixed&#8217;, &#8216;Movable&#8217;, &#8216;Rotating&#8217;];<\/div>\n<div><\/div>\n<div>object -&gt;\u00a0 blocks = {<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 &#8216;Fixed&#8217;: &#8216;description 1&#8217;,<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 &#8216;Movable&#8217;: &#8216;description 2&#8217;,<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 &#8216;Rotating&#8217;: &#8216;description 3&#8217;<\/div>\n<div><\/div>\n<div>}<\/div>\n<div><\/div>\n<div><\/div>\n<div>for object , use Object.keys(blocks) get all keys of objects.<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>express 02<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>response.sendFile(__dirname + &#8216;\/public\/index.html&#8217;);<\/div>\n<div><\/div>\n<div>express \u7684 static middleware<\/div>\n<div><\/div>\n<div>middleware \u7528\u4e8e\u68c0\u9a8c\uff0c\u8ba4\u8bc1\uff0c\u6570\u636e\u89e3\u6790<\/div>\n<div><\/div>\n<div>app.use(express.static(&#8216;public&#8217;));<\/div>\n<div><\/div>\n<div>\u5f53\u8c03\u7528\u4e00\u4e2a middleware \uff0c\u53ef\u4ee5\u52a0\u4e00\u4e2a next \u8c03\u7528\u4e0b\u4e00\u4e2a middleware<\/div>\n<div><\/div>\n<div>app.use(function(request, response, next) {<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 next();<\/div>\n<div><\/div>\n<div>});<\/div>\n<div><\/div>\n<div>\u5230\u6700\u540e\u4e00\u4e2a middleware\uff0c\u6ca1\u6709 next \u5219\u54cd\u5e94\u4e00\u4e2a done<\/div>\n<div><\/div>\n<div>app.use(function(request, response, next){<\/div>\n<div><\/div>\n<div>\u00a0\u00a0\u00a0 response.send(&#8216;done!&#8217;);<\/div>\n<div><\/div>\n<div>});<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>express \u4f7f\u7528 ajax \u8fd4\u56de<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>express 01<\/div>\n<div><\/div>\n<div><\/div>\n<div>\u5b89\u88c5 node \u5e76\u6307\u5b9a\u7248\u672c<\/div>\n<div><\/div>\n<div><\/div>\n<div>npm install express@4.9<\/div>\n<div><\/div>\n<div><\/div>\n<div>response.send();<\/div>\n<div><\/div>\n<div><\/div>\n<div>blocks = [&#8220;a&#8221;, &#8220;b&#8221;, &#8220;c&#8221;];<\/div>\n<div><\/div>\n<div>response.send(blocks);<\/div>\n<div><\/div>\n<div>curl \u67e5\u770b header \u4f1a\u53d1\u73b0\u81ea\u52a8\u89e3\u6790\u6210 json<\/div>\n<div><\/div>\n<div><\/div>\n<div>\u7b49\u540c\u4e8e<\/div>\n<div><\/div>\n<div>response.json(blocks);<\/div>\n<div><\/div>\n<div><\/div>\n<div>302\u8df3\u8f6c<\/div>\n<div><\/div>\n<div>response.redirect(&#8216;\/parts&#8217;);<\/div>\n<div><\/div>\n<div><\/div>\n<div>301\u8df3\u8f6c<\/div>\n<div><\/div>\n<div>response.redirect(301, &#8216;\/parts&#8217;);<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>node 04 Modules Semantic Versioning version patch \u00a0\u00a0\u00a0 &#8220;connect&#8221;: &#8220;~2.2.1&#8221;, \u00a0\u00a0\u00a0 &#8220;underscore&#8221;: &#8220;~1.3.3\u201d node 03 streams curl &#8211;upload-file abc.jpg http:\/\/localhost:3000 node 01 fs.readFileSync fs.readFile(&#8216;\/etc\/hosts&#8217;, function(){}); setTimeout(function(){ console.log(&#8220;here we go&#8221;)}, 5000); \/\/ \u7b49 5000ms \u518d\u8fd0\u884c function non-blocking epxress 05 route instances app.route() chaining function single application file is too long extracting routes to modules var router [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140],"tags":[],"class_list":["post-7983","post","type-post","status-publish","format-standard","hentry","category-nodejs"],"_links":{"self":[{"href":"https:\/\/jpuyy.com\/index.php?rest_route=\/wp\/v2\/posts\/7983","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jpuyy.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jpuyy.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jpuyy.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/jpuyy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7983"}],"version-history":[{"count":1,"href":"https:\/\/jpuyy.com\/index.php?rest_route=\/wp\/v2\/posts\/7983\/revisions"}],"predecessor-version":[{"id":7984,"href":"https:\/\/jpuyy.com\/index.php?rest_route=\/wp\/v2\/posts\/7983\/revisions\/7984"}],"wp:attachment":[{"href":"https:\/\/jpuyy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jpuyy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jpuyy.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}