express4创建ReSTful APIs

express4创建ReSTful APIs

  • 前期工作
  • 开发工作
  • 测试工作

前期工作:

1.使用express4作为web框架,mongoDB存储数据,首先设计的api如下:

URLHTTPPOST BodyResult
/api/moviesgetemptyall movies
/api/moviespostjson stringnew movie created
/api/movies/:idgetemptysingle movie
/api/movies/:idputjson stringupdates existing movie
/api/movies/:iddeleteemptydeletes existing movie

在某目录下进入控制台:express -e resuful,创建框架完毕后,npm install安装依赖包。
在psckage.json文件中dependencies中添加:“mongoose”:”~3.8.11”, 使用mongoose操作mongoDB。

2.安装mongoDB

安装合适的mongoDB版本,并启动mongoDB服务,进入mongoDB命令行:
use oniondb // 创建oniondb数据库
db.createCollection(‘movies’) // 创建oniondb中数据集movies
use oniondb // 切换到oniondb
db.movies.find({}) // 查找movies数据集下的全体数据
……
前期工作完毕后开始开发工作。


开发工作:

1.创建模板

根目录下创建model文件夹,进入目录后新建movie.js文件。

// movie.js
var mongoose=require('mongoose');
var Schema=mongoose.Schema;
var movieSchema = new Schema({
  title: String,
  releaseYear: String,
  director: String,
  genre: String
});
module.exports = mongoose.model('Movie', movieSchema);
// end of movie.js

2.创建路由

把api相关的路由写入到routes/movies.js中,创建movies.js文件。

// movies.js
var Movie = require('../model/movie');
var express = require('express');
var router = express.Router();

router.route('/movies').get(function(req, res) {
  Movie.find(function(err, movies) {
    if (err) {
      return res.send(err);
    }

    res.json(movies);
  });
});

router.route('/movies').post(function(req, res) {
 console.log(req.query);
 var movie = new Movie({title:req.query.title,
  releaseYear:req.query.releaseYear,director:req.query.director,genre:req.query.genre});
  //var movie = new Movie(req.body);

  movie.save(function(err) {
    if (err) {
      return res.send(err);
    }

    res.send({ message: 'Movie Added' });
  });
});

router.route('/movies')
  .get(function(req, res) {
    Movie.find(function(err, movies) {
      if (err) {
        return res.send(err);
      }

      res.json(movies);
    });
  })
  .post(function(req, res) {
    var movie = new Movie(req.body);

    movie.save(function(err) {
      if (err) {
        return res.send(err);
      }

      res.send({ message: 'Movie Added' });
    });
  });

  router.route('/movies/:id').put(function(req,res){
  Movie.findOne({ _id: req.params.id }, function(err, movie) {
    if (err) {
      return res.send(err);
    }

    for (prop in req.body) {
      movie[prop] = req.body[prop];
    }

    // save the movie
    movie.save(function(err) {
      if (err) {
        return res.send(err);
      }

      res.json({ message: 'Movie updated!' });
    });
  });
});
router.route('/movies/:id').get(function(req, res) {
  Movie.findOne({ _id: req.params.id}, function(err, movie) {
    if (err) {
      return res.send(err);
    }

    res.json(movie);
  });
});

router.route('/movies/:id').delete(function(req, res) {
 console.log(req.params);
  Movie.remove({
    _id: req.params.id
  }, function(err, movie) {
    if (err) {
      return res.send(err);
    }

    res.json({ message: 'Successfully deleted' });
  });
});

module.exports = router;
// end of movies.js

3.配置app.js文件

在app.js文件中添加变量:

var mongoose = require('mongoose');
var movies = require('./routes/movies');

连接mongoDB:

var connectionString = 'mongodb://localhost/oniondb';
mongoose.connect(connectionString);

添加中间件:

app.use('/api', movies);

4.启动服务

在根目录下运行:

npm start

正常的话,服务启动,监听的端口为默认值3000


测试工作

为了测试api的工作情况是否和预期一致,进行一些测试工作。这里使用了chrome的插件Postman进行请求的发送。

1.安装Postman

在chrome的扩展应用中搜索postman并安装,如果访问不了google,可以使用工具翻墙(自由门、无界等)。

2.POST、GET、DELETE方法的测试截图如下:

POST
这里写图片描述
GET
这里写图片描述
DELETE
这里写图片描述


结论说明

学习nodejs的过程是比较纠结的,因为版本的更新较多,合个人口味的参考资料较少,学习的途中在别人(http://www.sitepoint.com/creating-restful-apis-express-4/)的基础上进行改动,加以实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值