今天尝试使用express + mongoose,构建了一个简单的Hello world,实现以下功能:

  1. 定义mongodb使用的Schema,一个User
  2. 访问/输出Hello world
  3. 访问/init向mongodb插入初始化数据
  4. 访问/users从mongodb中取数据,并以json方式发送到浏览器

各功能都是极简单的试用,没有用到复杂的功能,但也有一定的参考价值,希望对大家有所帮助。

本次使用到的模块如下:

  1. mongoose 

    http://mongoosejs.com/ 

    一个在nodejs中使用的对mongodb进行建模的工具,可以定义一些Schema(定义每个doc里的字段名、类型、初始值、验证条件等),增删改查等,功能比较贴心。
  2. express 

    http://expressjs.com 

    nodejs环境中的web framework,提供了比nodejs的原始api高一级的抽象,方便进行web编程,如router、request/response的处理等,有很多基于它的模块或框架
  3. express-mongoose 

    https://github.com/LearnBoost/express-mongoose 

    让express中的某些方法,如res.send等,支持mongoose返回的查询,减少嵌套

在开始之前,先在项目目录的根目录下安装各模块:

npm install mongoose

npm install express

npm install express-mongoose

项目代码放在这里,可供参考:https://github.com/freewind/express-mongoose-demo

一、使用express创建一个Hello, world

创建一个app.js,内容如下:

var express = require("express");

var app = express.createServer();

app.get(‘/’, function(req, res) { 

res.send(‘Hello, world’); 

});

app.listen(3000);

短短几行代码,创建了一个app server。它监听于端口3000,并且访问/时,会向客户端发送Hello world.

二、试用/

启动该程序:

node app.js

如果没有提示错误,说明启动成功。

打开浏览器,访问:http://localhost:3000

显示如下:

三、定义Models

创建一个models.js,用于定义程序中使用的model(主要是Schema)。内容如下:

var mongoose = require(‘mongoose’);

var Schema = mongoose.Schema;

// Define User schema 

var _User = new Schema({ 

    email : String, 

    name : String, 

    salt : String, 

    password : String 

});

// export them 

exports.User = mongoose.model(‘User’, _User);

这里定义了两个Schema,一个User。为了简便好认,我在Schema前面加了一个下划线,当然你也可以使用其它命名,如UserSchema等。

在定义Schema时,还可以设一些默认值、验证什么的,但这里先忽略,毕竟是极简试用。

mongoose.model(‘User’, _User);

这一句中,第一个参数相当重要,它是给User这个schema,定义了一个名字。其它地方如果想使用这个model,可以这样:

var User = mongoose.model(‘User’)

但在这里,我们直接把它放在exports里了,更方便:

exports.User = mongoose.model(‘User’, _User);

四、/init

现在要把models.js导入到app.js中,并且定义一个/init,访问它时将会向数据库中插入一些数据。代码如下:

var express = require("express"); 

var mongoose = require(‘mongoose’);

var models = require(‘./models’);

var User = models.User;

mongoose.connect(‘mongodb://localhost/express-mongoose-demo’);

var app = express.createServer();

// init data. Use "get" to simplify 

app.get(‘/init’, function(req, res) { 

    var user = new User({ 

        email : ‘nowind_lee@qq.com’, 

        name : ‘Freewind’ 

    }); 

    user.save(); 

    res.send(‘Data inited’); 

});

app.listen(3000);

首先导入了mongoose模块,以前之前定义的models.js。然后将models.User取出来供下面使用。

下面这句话用于连接mongodb,这里使用express-mongoose-demo

mongoose.connect(‘mongodb://localhost/express-mongoose-demo’);

接着定义/init,为了演示方便起见,这里使用http get,可直接在浏览器中访问该url。如果在真实程序中,应该使用app.post(‘/init’, …)

打开浏览器,访问:http://localhost:3000/init

提示数据已经初始化。使用mongodb的控制台,查询结果如下:

看到数据的确已经插入到mongodb中了。

五、/users

接着实现/users,查询User数据,并以json格式返回到浏览器端。代码很简单,如下:

app.get(‘/users’, function(req, res) { 

    User.find(function(err, doc) { 

        res.json(doc); 

    }); 

});

打开浏览器,访问http://localhost:3000/users

果然看到json数据过来了。

但看看这段代码,里面有两个嵌套。如果数据再复杂一些的话,可能嵌套更多,就不易读了。能不能想办法让它简化一点呢?

下面就该express-mongoose出场了。

六、express-mongoose

express-mongoose项目就是为了简化express和mongoose。首先导入它:

require(‘express-mongoose’);

然后将/users方法改写成:

app.get(‘/users’, function(req, res) { 

    res.send(User.find()); 

});

看这里,直接用res.send就直接发送了,不用传回调函数了,代码简单了很多。

重启app.js,再访问:http://localhost:3000/users,截图如下:

果然效果一样。

如果去掉express-mongoose,会是什么效果呢?让我们先去掉:

require(‘express-mongoose’);

再访问:

现在返回的就是User.find()这个query的值,而不是查询结果。

今天就到这里,以后将慢慢加入更多的功能。

Express + Mongoose 极简入门的更多相关文章

  1. Git 极简入门教程学习笔记

    Git 极简入门教程  http://rogerdudler.github.io/git-guide/index.zh.html 测试用 https://github.com/xxx/BrnShop. ...

  2. .Net Core in Docker极简入门(下篇)

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 Docker-Compose 代码修改 yml file up & down 镜像仓库 最后 前言 上一篇[. ...

  3. ElasticSearch极简入门总结

    一,目录 安装es 项目添加maven依赖 es客户端组件注入到spring容器中 es与mysql表结构对比 索引的删除创建 文档的crud es能快速搜索的核心-倒排索引 基于倒排索引的精确搜索. ...

  4. Spring Security极简入门三部曲(上篇)

    目录 Spring Security极简入门三部曲(上篇) 写在前面 为什么要用Spring Security 数据库设计 demo时刻 核心代码讲解 小结 Spring Security极简入门三部 ...

  5. Spring Security极简入门三部曲(中篇)

    目录 Spring Security极简入门三部曲(中篇) 验证流程 Authentication接口 过滤器链 AuthenticationProvider接口: demo时刻 代码讲解 小结 Sp ...

  6. Express4+Mongodb极简入门实例

    一.准备工作: 1.启动mongodb:bin目录下运行 2.在test数据库里插入一条数据: 二.正式开始: 1.通过应用生成器工具 express 快速创建一个应用的骨架,参考Express中文网 ...

  7. Spring Boot 如何极简入门?

    Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运行 ...

  8. Nginx 极简入门教程!

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Ngi ...

  9. 【Java杂货铺】用Security做权限极简入门

    原来大多数单体项目都是用的shiro,随着分布式的逐渐普及以及与Spring的天生自然的结合.Spring Security安全框架越受大家的青睐.本文会教你用SpringSecurity设计单项目的 ...

随机推荐

  1. luogu P3320 [SDOI2015]寻宝游戏

    大意:给定树, 要求维护一个集合, 支持增删点, 询问从集合中任取一点作为起点, 遍历完其他点后原路返回的最短长度. 集合中的点按$dfs$序排列后, 最短距离就为$dis(s_1,s_2)+...+ ...

  2. 解决:IDE编译报错:Dangling metacharacter

    Dangling metacharacter的意思是说:摇摆不定的元字符. 翻译成编程意思就是:当前字符计算有其它意思,并不能确定你到底用于什么意思.类似于中文的多义词. 如下图所示,当我们要分割字符 ...

  3. 使用curl访问https

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具.然而在使用cr ...

  4. [Nest] 02.nest之控制器

    控制器 Controller Nest 的核心概念 模块 Module 控制器 Controller 服务与依赖注入 Provider Dependency injection 控制器负责处理应用的特 ...

  5. oracle 重置密码(一般电网,国企需要的二级等保)

    oracle 10g,11g 可以查找以下,12c没有测试 一.查看profile配置并记录;二.在重置密码之前修改profile(PASSWORD_REUSE_MAX.PASSWORD_REUSE_ ...

  6. k8s自签TLS证书

    自签TLS证书 TLS证书用于进行通信使用,k8s组件需要的证书有: 第一步:安装证书生成工具cfssl 在这之前需要先建立一个目录来存放安装的工具mkdir ssl,后面将安装的工具移动到各自的目录 ...

  7. 12 Python之函数进阶

    1. 动态传参 *, ** : 形参: 聚合 位置参数* -> 元组 def func(*args, a, b, c): print(a, b , c, args) func(1,2,3,4,5 ...

  8. centos 7 安装 Oracle 12c

    #!/bin/bash #!/usr/bin/expect -f #/etc/sysctl.conf --bash-srcipts-- echo 'net.ipv6.conf.all.disable_ ...

  9. QT 给工程添加图片

    先打开如图的打开方式 然后我们看到以下的画面,选择下面的 然后我们选择如下:,这里我们要注意我们的图片资源有一定要和QRC资源在同一个文件夹中 之后我们通过在stylesheet里面设置来使用我们添加 ...

  10. mysql 5.5.36 通用二进制安装部署

    1.创建mysql用户 # useradd -r mysql 2.解压二进制包到指定目录下 # tar xf mysql-5.5.36-linux2.6-x86_64.tar.gz -C /usr/l ...