基于Nodejs+express4+Mongodb+Angularjs建立web项目
- 基于Nodejs搭建web服务器
- 利用Express4搭建restful服务
- 使用Mongodb作为数据库,用mongoose组件连接Mongodb
- 使用AngularJS+bootstrap设计UI界面
- 使用Webstorm 10.0.4开发
第一部分:服务端搭建
1.通过Webstorm建立Node.js Express APP
File -> New Project -> Node.js Express App,
Location栏填写项目名称,选择Nodejs和npm位置,
Options -> Template 选择EJS
在项目下新建文件夹models保存mongodb相关对应model
。
在models目录下创建model文件movie.js
。
在routes目录下创建restful API 支持文件 movies.js
完成后的目录结构如下
- project
-- bin
--- www
-- models
--- movie.js
-- node_modules
--- ...
-- public
--- ...
-- routes
movies.js
app.js
package.json
2.在package.json中添加mongoose支持及其他相关组件
{
"name": "project",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.13.2",
"cookie-parser": "~1.3.5",
"debug": "~2.2.0",
"ejs": "~2.3.3",
"express": "~4.13.1",
"morgan": "~1.6.1",
"errorhandler": "~1.4.2",
"serve-favicon": "~2.3.0",
"mongoose": "~4.2.5",
"connect-mongo": "latest",
"express-session": "latest"
},
"engines": {
"node": ">=0.10.0"
}
}
3.在movie.js中建立movie模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// define an db object
var movieSchema = new Schema({
title: String,
releaseYear: String,
director: String,
genre: String
});
// bind module for accessing outside
module.exports = mongoose.model('Movie', movieSchema);
4.在movies.js中建立基于movie的restful API
引入movie模型,并开启router
var Movie = require('../models/movie.js');
var express = require('express');
var router = express.Router();
实现一些基本的功能API
var Movie = require('../models/movie.js');
// get all movies
exports.list = function(req, res){
Movie.find(function (err, movies) {
if (err) {
return res.send(err);
}
res.json(movies);
})
};
// create new movie
exports.create = function(req, res){
var movie = new Movie(req.body);
movie.save(function (err) {
if (err) {
return res.send(err);
}
res.send({message: 'add a movie'});
});
};
// update a movie
exports.update = function (req, res) {
//Movie.findById(req.params.id, callback)
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];
}
movie.save(function (err) {
if (err) {
return res.send(err);
}
res.json({message: "update a movie"});
});
});
};
//delete a movie
exports.delete = function (req, res) {
Movie.remove({_id: req.params.id}, function (err, movie) {
if (err) {
return res.send(err);
}
res.json({message: 'delete a movie'});
});
};
导出功能模块让其他部分可以使用该模块