express4创建ReSTful APIs
- 前期工作
- 开发工作
- 测试工作
前期工作:
1.使用express4作为web框架,mongoDB存储数据,首先设计的api如下:
URL | HTTP | POST Body | Result |
---|---|---|---|
/api/movies | get | empty | all movies |
/api/movies | post | json string | new movie created |
/api/movies/:id | get | empty | single movie |
/api/movies/:id | put | json string | updates existing movie |
/api/movies/:id | delete | empty | deletes 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/)的基础上进行改动,加以实现。