初步认识Node 之Express

  通过本文,你会对Express有一个较为具体的了解。

   起源

  2009年6月26日,TJ Holowaychuk提交了Express的第一次commit,接下来在2010年1月2日,有660次commits的Express 0.0.1版本正式发布。TJ和Ciaron Jessup是当时最主要的两个代码贡献者。截止到目前为止,Express拥有了5016次commit,版本号为4.11.1,由strongloop维护。

   定义

  Express是一个简洁而灵活的node.js web 应用框架,它提供一系列强大特性帮助你创建各种web应用。

   优秀特性

  1、路由分发

  它可以处理来自不同路径的请求

  2、请求处理

  将传入请求的handler传入request和response,对象中原先该有的还在,但是却加入了更多的新的特性。

  3、视图渲染

  Express为response对象添加了一个reader方法,主要能加载模板引擎和对应的视图文件,之后渲染成普通的HTML文档。

   安装
npm install express
   使用

   1、Hello World

1 var express = require('express')
2 var app = express()
3 
4 app.get('/', function (req, res) {
5   res.send('Hello World')
6 })
7 
8 app.listen(3000)

  我们用get()来捕获“get / ”请求,然后调一个回调函数,这个回调函数会被传入req,res两个对象,最后只用了res的res.send来返回整个页面的字符串。当然,Express里面有很多的内置方法可以用来进行路由控制,get,post,head,delete等等,具体可以参考Express官方文档

  2、创建一个服务器

var express = require('express');
var app = express(); 

var server = app.listen(3000, function() { 
    console.log('Express is listening to http://localhost:3000'); 
});

   首先把expressre quire进来,然后初始化一个实例并赋值给变量app,接下来再初始化一个server监听特定的3000端口,app.listen()实际上是包装了原生的http.createServer()函数。

   3、关于处理REST API

 1 app.get('/', function (req, res) {
 2         res.render('index');
 3     });
 4     app.get('/itemslist', function (req, res) {
 5         Item.get_items(function (err, items) {
 6             if (err) {
 7                 items = [];
 8             }
 9 
10             res.render('itemslist', {
11                 items: items
12             });
13         });
14     });
15 
16     app.get('/shopcart', function (req, res) {
17         Promotion.get_all_promotion(function (err, promo) {
18             if (err) {
19                 promo = [];
20             }
21             req.session.basic_items = Increase_multiply_promotion_info(req.session.basic_items, promo);
22             req.session.items_subtotal = caculate_item_subtotal(req.session.basic_items);
23 
24             console.log(req.session.basic_items, "__________________________-");
25             res.render('shopcart', {
26                 items: req.session.basic_items,
27                 items_subtotalstr: add_string_to_items_subtotal(req.session.items_subtotal)
28             });
29         });
30     });
31 
32     app.post('/shopcart', function (req, res) {
33         req.session.allinputs = req.body.inputs;
34         if (req.session.basic_items == undefined) {
35             req.session.basic_items = [];
36         }
37 
38         if (req.session.allinputs != undefined) {
39             Item.get_item_from_barcode(req.session.allinputs, function (err, item) {
40                 if (err) {
41                     console.log("error 1");
42                 }
43                 var have_count_inputs = Dispose_inputs.add_count_to_barcodes(req.session.allinputs);
44                 req.session.basic_items = Dispose_inputs.add_other_property_to_inputs(have_count_inputs, item);
45                 res.end();
46             });
47         } else {
48             console.log("empty inputs");
49             res.end();
50         }
51     });

  这是一些我的关于如何处理一个小型购物网站REST API。

  

 

小提示:Express 建立在connect和node之上,意味着所有的connect中间件均可以在Express中使用。

 

ps:本文内容若是有误或者迷糊,还请指正或指出。

 

posted @ 2015-01-23 11:34  w_fsovereign  阅读(593)  评论(1编辑  收藏  举报