Express+MongoDB步步为'赢'

https://segmentfault.com/a/1190000008830333

前奏

Express 是什么?

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

全局安装express脚手架

$ npm install express-generator -g

创建express项目

$ express myapp
$ cd myapp
$ npm install
$ DEBUG=myapp npm start

MongoDB与Mongoose?

  • MongoDB是一个对象数据库,是用来存储数据的;存储的数据格式为JSON。
  • Mongoose是封装了MongoDB操作(增删改查等)的一个对象模型库,是用来操作这些数据的。

安装MongoDB:
https://www.mongodb.com/download-center?jmp=nav

安装Mongoose:

$ npm install mongoose --save

一、连接MongoDB

在项目根目录下新建/lib/mongo.js

var mongoose = require("mongoose");

var db = mongoose.connect(‘mongodb://localhost:27017/myblog‘);

module.exports = db

要连接的数据库为myblog

二、Schema

一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架

新建一个用户Schema

在项目根目录下新建/models/users.js

var mongoose = require("mongoose");
var db = require(‘../lib/mongo‘);
//一个用户模型
var UserSchema = new mongoose.Schema({
    username    : { type:String },
    password    : {type: String},
    avatar      : {type: String},
    age         : { type:Number, default:0 },
    description : { type: String},
    email       : { type: String },
    github      : { type: String },
    time        : { type:Date, default:Date.now }
});
//创建Model
var UserModel = db.model("user", UserSchema );
module.exports = UserModel
  • user:数据库中的集合名称,当我们对其添加数据时如果user已经存在,则会保存到其目录下,如果不存在,则会创建user集合,然后在保存数据。
  • 拥有了Model,我们也就拥有了操作数据库的金钥匙,就可以使用Model来进行增删改查的具体操作。

Entity

由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。

var UserEntity = new UserModel({
    name : "hzzly",
    age  : 21,
    email: "[email protected]",
    github: ‘https://github.com/hzzly‘
});
UserEntity.save(function(error,doc){
    if(error){
        console.log("error :" + error);
    }else{
        console.log(doc);
    }
});

三、封装数据库的CURD

  • 在lib文件下新建api.js
  • 采用Promise封装对数据库的操作,避免回调地狱,使得代码能够更好的被读懂和维护。
var UserModel = require(‘../models/users‘);

module.exports = {
    /**
     * 添加数据
     * @param  {[type]} data 需要保存的数据对象
     */
    save(data) {
        return new Promise((resolve, reject) => {
            //model.create(保存的对象,callback)
            UserModel.create(data, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    find(data={}, fields=null, options={}) {
        return new Promise((resolve, reject) => {
            //model.find(需要查找的对象(如果为空,则查找到所有数据), 属性过滤对象[可选参数], options[可选参数], callback)
            UserModel.find(data, fields, options, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    findOne(data) {
        return new Promise((resolve, reject) => {
            //model.findOne(需要查找的对象,callback)
            UserModel.findOne(data, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    findById(data) {
        return new Promise((resolve, reject) => {
            //model.findById(需要查找的id对象 ,callback)
            UserModel.findById(data, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    update(conditions, update) {
        return new Promise((resolve, reject) => {
            //model.update(查询条件,更新对象,callback)
            UserModel.update(conditions, update, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    remove(conditions) {
        return new Promise((resolve, reject) => {
            //model.update(查询条件,callback)
            UserModel.remove(conditions, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    }
}

四、使用

在/routers/index.js中使用

var api = require(‘../lib/api‘);

router.post(‘/login‘, function(req, res, next) {
    var user = {
        username : req.body.username,
        password: req.body.password
    };
    api.findOne(user)
        .then(result => {
            console.log(result)
        })
})
router.post(‘/sign_up‘, function(req, res, next) {
    var user = {
        username : req.body.username,
        password: req.body.password,
        email: req.body.email
    };
    api.save(user)
        .then(result => {
            console.log(result)
        })
})
router.get(‘/user_list‘, function(req, res, next) {
    //返回所有用户
    api.find({})
        .then(result => {
            console.log(result)
        })
    //返回只包含一个键值name、age的所有记录
    api.find({},{name:1, age:1, _id:0})
        .then(result => {
            console.log(result)
        })
    //返回所有age大于18的数据
    api.find({"age":{"$gt":18}})
        .then(result => {
            console.log(result)
        })
    //返回20条数据
    api.find({},null,{limit:20})
        .then(result => {
            console.log(result)
        })
    //查询所有数据,并按照age降序顺序返回数据
    api.find({},null,{sort:{age:-1}}) //1是升序,-1是降序
        .then(result => {
            console.log(result)
        })
})

Express+MongoDB步步为'赢'

时间: 2024-10-14 23:32:25

Express+MongoDB步步为'赢'的相关文章

从无到有,用Nodejs+express+mongodb搭建简易登陆系统

前端处理server表示很蛋疼,初学Node,虽然感觉异常强大,但是学起来还是有些吃力的,Node是工具,它不是万能的,搭建一个系统还是需要借助其他一些工具,对于我这个没怎么接触server的前端来说,挑战是有的.昨天参考一些资料尝试用Node+express+mongodb搭建一个简易的登陆系统,在此记之. express是一个灵活的nodejs web应用框架, 提供一系列强大特性帮助你创建各种Web应用. Mongodb是数据库. 1.安装express,express安装比较简单,直接用

2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客

序,Node是基于V8引擎的服务器端脚本语言. 基础准备 Node.js: Express:本文用的是3.21.2版本,目前最新版本为4.13.3,Express4和Express3还是有较大区别,可以去官网查看wiki:https://github.com/strongloop/express MongoDB: 一.使用Express搭建一个站点 1 快速开始安装Express Express是Node上最流行的Web开发框架,通过它可以快速开发一个Web应用.全局模式下输入命令: $ npm

使用nodejs+express+mongodb开发web的例子

介绍:简单的介绍下nodejs+express+mongodb这三者. nodejs:是运行在服务器端的程序语言,表面上看过去就是javascript一样的东西,实际是由c++开发是服务器语言. express:是nodejs的一种web框架,node有很多的开源框架,express是一个大神开发的(这尊神已经移驾到go语言的开发去了).express可以让你更方便的操作node(因为直接用nodejs写web比较麻烦,nodejs是事件驱动的,所以有很多异步回调,写多了就看着晕...) mon

【转】nodejs+express+mongodb简单的例子

简单的介绍下node+express+mongodb这三个东西.node:是运行在服务器端的程序语言,表面上看过去就是javascript一样的东西,但是呢,确实就是服务器语言,个人觉得在一定层次上比c灵活,java就不提了.反正你只要认为node可以干很多事就行了,绝对不只是web开发.express:这货呢,就是node的一种框架,node有很多的开源框架,express是一个大神开发的(这尊神已经移驾到go语言的开发去了).express可以让你更方便的操作node(因为原生的node写起

nodejs+express+mongodb简单的例子

简单的介绍下node+express+mongodb这三个东西.node:是运行在服务器端的程序语言,表面上看过去就是javascript一样的东西,但是呢,确实就是服务器语言,个人觉得在一定层次上比c灵活,java就不提了.反正你只要认为node可以干很多事就行了,绝对不只是web开发.express:这货呢,就是node的一种框架,node有很多的开源框架,express是一个大神开发的(这尊神已经移驾到go语言的开发去了).express可以让你更方便的操作node(因为原生的node写起

node+express+mongodb初体验

从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整个学习思路,以下是我的学习分享,是入门级学习体验适合node+mongodb开发小白,node已玩过很久的大神这篇文章可能不适合. 开篇来个例子: 客户端表单页面: <!DOCTYPE HTML> <html lang="en-US"> <head> &

基于 Node.js + Express + mongoDB + Bootstrap 搭建的电影网站

电影网站 ?? GitHub: https://github.com/bxm0927/movie-website 此项目是基于 Node.js + Express + mongoDB + Bootstrap 搭建的电影网站. 主要功能模块: 一期:前台电影展示页.电影详情页.后台电影管理中心(电影录入.电影修改) 二期:用户登录注册注销功能.用户识别和持久化.后台用户管理中心(用户录入.用户修改).电影评论 <!-- more --> 图片预览 技术栈 [前端] HTML/CSS/JS:亘古不

基于NodeJS+Express+mongoDB+Bootstrap的全栈式工程化开发前后端分离博客系统实战

课程目标本课程通过一个完整的项目,让学员了解如何使用Jade+Node.js+Express+mongoDB+Bower+Gulp+Yeoman的组合开发Web应用.可以让学员更深入地掌握Node.js和Express技术. 适用人群node.js程序员,express程序员,JAVAscript程序员 课程简介本系统是一款博客系统,拥有博客必要的功能,如用户注册.用户登录.用户退出.文章列表,文章查看.添加文章,删除文章,修改文章.文章搜索.后台权限控制等. -----------------

Node.js Express+Mongodb 项目实战

Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很不错的练手项目,分享给大家. GitHub源码:https://github.com/oceanMin/cms 项目前准备 安装node.js 安装express 安装mongoDB 章节目录 快速开始 快速开始 模块 express商品管理系统介绍 框架搭建.ejs .express.static