曲振飞的个人博客

专注于Web全栈开发、APP设计、网站建设

当前位置 : 主页 > 后端开发 > Express框架+mongoose+jade构建增删改查

Express框架+mongoose+jade构建增删改查

时间:2016-11-21 23:18:47 栏目:后端开发 作者:曲振飞 点击: 299

Express是一个基于Node.js平台的简单、高效、灵活的Web应用开发框架,本次使用Express框架、数据库mongoose和前端的jade框架实现从前台到后台数据请求的小案例。

安装Express

npm install -g express-generator #全局安装 -g表示全局安装

express安装后,创建项目此处命名为webapp

express webapp

以下是我们创建好的目录结构

blob.png

app.js 是express框架的入口文件

bin 创建一个http服务器放在www里,执行 npm start 命令,在./bin/www 下开启一个http容器 

router 路由,其中的res.render就是将我们的项目文件与模板进行渲染

views 里面是jade的模板,可以将入口文件里的模板配置文件改为html,vim app.js 修改 修改 app.engine('.html',ejs._express)app.set('view engine','html') 

package.json 放了我们项目相应的名字、版本,执行 npm install 命令将package.json文件里的配置信息安装为我们的框架里。

安装后的项目结构

blob.png

有了上面的准备工作后开始我们的项目:

新建model.js文件,加载mongoose模块且创建我们的模型

// 1.加载mongoose模块
var mongoose = require('mongoose');
// 2.链接mongoDB数据库
var db = mongoose.createConnection('mongodb://127.0.0.1:27017/qufei');
// 3.数据库链接错误信息
db.on("error",function(error){
        console.log(error);
});
// 4.定义模型
var Schema = mongoose.Schema;
var news = new Schema({
    title:{type: String},
    content:{type:String},
    author:{type:String,default:'qufei'},
    date:{type:Date,default:Date.now}
});
// 5.创建模型,第一个参数是集合(表名)
var myModel  = db.model('news',news);
module.exports = myModel;

routes/index.js

该文件为后台核心代码,在此将数据库的增删改查,以及业务逻辑都写在此,在此要先加载上面定义的model文件

var express = require('express');
var router = express.Router();
var myModel = require('../model/model');
/* GET home page. 
	router.get('/', function(req, res, next) {
	  res.render('index', { title: '新闻发布系统' });
	});
*/
const routes = (app) => {
	//首页
	app.get('/',function(req, res, next) {
		var title = '新闻发布系统';
		myModel.find({},(err,result) => {
			if (err) {
				return console.log(err);
			}else{
				res.render('index',{result,title});
			}
		});
	});
	//插入信息
	app.get('/insert',function(req,res,next){
		res.render('insert');
	});
	app.post('/insert',function(req,res,next){
		let newStudent = [{
            title: req.body.title,
            author: req.body.author,
            content:req.body.content,
            date:req.body.date
        }]
        myModel.create(newStudent, (err) => {
            if(err) return console.log(err)
            res.send("<a href='/'>添加成功,点击返回首页</a>")
        })
	});
	//删除信息
    app.get('/delete', (req, res, next) => {
        var id = req.query.id;
        myModel.remove({_id:id}, (err, result) => {
            if(err) return console.log(err)
            console.log(result.result)
            res.send("<a href='/'>删除成功,点击返回首页</a>")
        })
    })
    //更新信息
    app.get('/update',(req,res,next) => {
    	var title = "更新";
    	let id = req.query.id;
    	myModel.findOne({_id:id},(err,result) => {
    		if(err) return console.log(err);
    		res.render('update',{title,result});
    	});
    	
    });
    app.post('/update',(req,res,next) => {
    	let condition = {_id:req.body.id};
    	let updateData ={$set:{title: req.body.title,author: req.body.author,content:req.body.content,date:req.body.date}};
        myModel.update(condition,updateData, (err,result) => {
            if(err) return console.log(err)
            console.log(result);
            res.send("<a href='/'>更新成功,点击返回首页</a>")
        })
    });


}
module.exports = routes;

在app.js入口文件加载我们的index.js文件,修改以下标记的代码1和2

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var router = require('./routes/index');  //修改之1
//var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

//app.use('/', index);
router(app);    //修改之2

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

前端采用jade将后台请求的数据使用jade语法在html文档里直接写入js语句来遍历信息,在此不做过多介绍,完整的项目demo请到我的Github获取查看 https://github.com/Q-Angelo/Node.js/tree/gh-pages/express

jade语法学习请参考 前端模板引擎Jade入门篇语法总结

关键字: Express框架

关于站长

曲振飞,一个热忠、从事于互联网的90后青年.专注于网站建站、网站设计及优化.以用户体验、WEB标准为主旨,将网站的整体设计与网页设计的相关原理紧密结合.