《开始学Backbone.js》之第三章Backbone Models与Collections(六)

来源:互联网 发布:网络打赏 人民日报 编辑:程序博客网 时间:2024/04/24 10:38

      本文内容接上篇博客内容

 

   与服务端交换数据

       Backbone模型最后可用的功能集合是与如何从一个提供REST API的服务端读取数据,或将数据发送至该服务端相关。在开始接触Backbone的这个相关机制前,我们首先设置一个简单的后端用以为我们的API调用提供响应。

 

   Node.js服务端后台

       既然我们使用了JavaScript,我将概述一下使用Node.js的一个简单的服务端,但你也可以根据你的选择轻松地换成其他REST服务端的实现。由于本书的重点在于客户端,因此我们不会深入地讨论服务端的实现。然而,对于解释如何响应Backbone应用的请求这一目的来说已经够用了。

 

      首先需要从http://nodejs.org上安装Node.js。安装完后,使用NPM包管理器安装express node包,其是一个很小的用于Node.js的web应用框架,通过它可以轻松地运行一个具有REST API的简单服务端。

npm install express

      最后,只需将以下代码拷贝到server.js中。从代码中可以看到,它通过http://localhost:8080/books提供了一些简单的端点服务。

/** * 由localhost:8080/books提供的简单API */var express = require('express');var app = express();var bookId = 100;function findBook(id){    for(var i = 0; i < books.length; i++){        if(books[i].id === id){            return books[i];        }    }    return null;}function removeBook(id){    var bookIndex = 0;    for(var i = 0; i < books.length; i++){        if(books[i].id === id){            bookIndex = i;        }    }    books.splice(bookIndex, 1);}app.configure(function(){    //解析由body request提供的JSON对象    app.use(express.bodyParser());});var books = [    {id: 98, author: 'Stephen King', title: 'The Shining', year: 1977},    {id: 99, author: 'George Orwell', title: 1949}];/** * HTTP GET /books * 应该返回一个books的列表 */app.get('/books', function(request, response){    response.header('Access-Control-Allow-Origin', '*');    console.log('In GET function');    response.json(books);});/** * HTTP GET /books/:id * id是你想获取的那本书的唯一标识符 * 应该返回具有指定id的任务,不然的话就是404 */app.get('/books/:id', function(request, response){    response.header('Access-Control-Allow-Origin', '*');    console.log('Getting a book with id ' + request.paras.id);    var book = findBook(parseInt(request.params.id, 10));    if(book === null){        response.send(404);    }else{        response.json(book);    }});/** * HTTP POST /books/ * 请求的主体包含了创建的book * 若成功则返回200 */app.post('/books/', function(request, response){    response.header('Access-Control-Allow-Origin', '*');    var book = request.body;    console.log('Saving book with the following structure ' + JSON.stringify(book));    book.id = bookId++;    books.push(book);    response.send(book);});/** * HTTP PUT /books/ * id是你想更新的那本书的唯一标识 * 如果具有该id的书不存在则返回404 */app.put('/books/:id', function(request, response){    response.header('Access-Control-Allow-Origin', '*');    var book = request.body;    console.log('Updating Book ' + JSON.stringify(book));    var currentBook = findBook(parseInt(request.params.id, 10));    if(currentBook === null){        response.send(404);    }else{        //本地存储book        currentBook.title = book.title;        currentBook.year = book.year;        currentBook.author = book.author;        response.send(book);    }});/** * HTTP DELETE /books/ * id是你想删除的那本书的唯一标识 * 如果具有指定id的那本书不存在则返回404 */app.delete('/books/:id', function(request, response){    console.log('calling delete');    response.header('Access-Control-Allow-Origin', '*');    var book = findBook(parseInt(request.params.id, 10));    if(book === null){        console.log('Could not find book');        response.send(404);    }else{        console.log('Deleting ' + request.params.id);        removeBook(parseInt(request.params.id, 10));        response.send(200);    }    response.send(200);});//为允许CORS请求追加设置var allowCrossDomain = function(req, response, next){    response.header('Access-Control-Allow-Origin', 'http://localhost');    response.header('Access-Control-Allow-Methods', 'OPTIONS, GET, PUT, POST, DELETE');    response.header('Access-Control-Allow-Headers', 'Content-Type');    if('OPTIONS' == req.method){        response.send(200);    }else{        next();    }};app.configure(function(){    app.use(allowCrossDomain);});//设置app的端口号为8080app.listen(8080);

        在命令行中输入node server.js以启动服务器。这个服务器虽然非常简单,但对于Backbone的持久性调用的正确执行来说已经足够了。


       本篇内容翻译自《Beginning Backbone.js》,原著作者James Sugrue。

0 0
原创粉丝点击