1. 程式人生 > >nodejs+Express實現Restful的web應用

nodejs+Express實現Restful的web應用

    最近一直在學習nodejs,其實剛開始聽說nodejs的時候我比較震驚,因為nodejs是用來做伺服器的,那時候我就在想js不是做前臺的麼,怎麼跟後臺伺服器可以搭邊呢,後來學習了之後就發現了nodejs底層是C++寫的,然後用js封裝了一下。

    關於什麼是Restful這裡簡單介紹下,關於它更深的原理啊理論啊我也不是很清楚,它是一種基於 HTTP 協議的網路應用的介面風格,充分利用 HTTP 的方法實現統一風格介面的服務,我們經常用到的是 GET、POST、PUT 和 DELETE 方法。根據 REST 設計模式,這4種方法通常分別用於實現以下功能,GET:獲取 POST:新增 PUT:更新,DELETE:刪除(這裡的CRUD都是針對與一個資源而言的)。

    最近在公司的專案組都是用的Restful風格進行開發,用的是java的jersey已經springMVC(自己做一些配置可以用Restful風格),然後就想到了如何用nodejs進行Restful的web service呢?下面就是答案:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);

app.get('/users', user.list);
app.get('/users/:id', user.get);
app.delete('/users/:id', user.delete);
app.post('/users', user.add);
app.put('/users/:id', user.update);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

    這裡加的就是user這個資源的一些路由控制,我們這裡不涉及到資料庫,所以就用一個map來模擬資料庫中的資源吧,在專案根目錄建立一個model資料夾,建立一個users.js檔案:

exports.users = {
  "1":{
    id:1,
	name:"user1",
	password:"password1"
  },
  "2":{
    id:2,
	name:"user2",
	password:"password2"
  },
  "3":{
    id:3,
	name:"user3",
	password:"password3"
  }
}

    然後進入routes資料夾開啟user.js,修改如下:

/*
 * GET users listing.
 */

var users = require('../model/users').users;

exports.list = function(req, res){
  res.setHeader('Content-Type', 'application/json;charset=utf-8');
  res.send(users);
};

exports.get = function(req, res){
  res.setHeader('Content-Type', 'application/json;charset=utf-8');
  res.send(users[req.param('id')]);
};


exports.delete = function(req, res){
  res.setHeader('Content-Type', 'application/json;charset=utf-8');
  delete users[req.param('id')];
  res.send({status:"success", message:"delete user success"});
  console.log(users);
};


exports.update = function(req, res){
  res.setHeader('Content-Type', 'application/json;charset=utf-8');
  users[req.body.id] = req.body;
  res.send({status:"success", message:"update user success"});
  console.log(users);
};


exports.add = function(req, res){
  res.setHeader('Content-Type', 'application/json;charset=utf-8');
  console.log(req.body);
  users[req.body.id] = req.body;
  res.send({status:"success", message:"add user success"});
  console.log(users);
};

    postman測試下吧(這裡就測試一個吧):

   

    OK,測試通過。