node.js连接mongoDB数据库 快速搭建自己的web服务


Posted in Javascript onApril 17, 2016

一、写在前面

  人人都想成为全栈码农,作为一个web前端开发人员,通往全栈的简洁之路,貌似就是node.js了。前段时间学习了node.js,来谈谈新手如何快速的搭建自己的web服务,开启全栈之路。

二、安装node.js

  接触过后端开发的人都知道,首先要安装服务。作为新手,肯定是选择最简单的可视化安装了(傻瓜式下一步,其它的方式等熟悉相关操作后自然就会了的),通过官网http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi 下载电脑适配的安装包(这个是windows的,买不起mac啊),然后根据引导安装就可以了,默认安装在C:\Program Files\nodejs文件下,并将该目录添加进PATH环境变量。具体做法,右击”我的电脑“-”属性“-“系统高级”-”高级“-”环境变量“-选择“变量名:PATH”;“改变量值:在最后面添加【C:\Program Files\nodejs】(根据自己的安装目录而定)”。打开cmd直接运行命令:

node -v   可以输出当前版本号。node文件里已经集成了npm,之后使用npm install XXX 来安装需要的插件或者模块。 

三、使用express框架

  忙活了一阵,终于可用npm命令进行初始化、安装express框架,然后写个hello world 爽一下了。为什么要选择express框架了,当然有它的特别之处,对新手来说最怕的就是麻烦还容易出错。express当然为我们考虑到了,所以提供了快速生成器:express-generator

1、通过命令:npm install express-generator -g 安装到全局

2、在用express 命令生成项目结构

  express myapp 其中的myapp是你的项目名称

3、通过cd myapp 进入项目文件中

  通过npm install 初始化依赖模块

  通过set DEBUG=myapp & npm start 启动web服务器

4、在浏览器中打开 http://localhost:3000/ 网址就可以看到这个应用了。

 默认情况下用的模版引擎是jade,项目里也已经配置好了这个模版。 

四、介绍express 生成器的项目

1、myapp项目的机构如下:

    node.js连接mongoDB数据库 快速搭建自己的web服务

2、package.json 这个可以说是模块管理包,项目信息和模块的版本号,其实你会发现在项目模块初始化的时候就是由这里的配置去查找生成的。

3、app.js 是项目的启动文件,可以说是项目的核心。主要写一些公共的功能。

4、bin 文件下有个无后缀的www文件,这是项目的入口文件,配置web服务端口和一些监听事件。

5、node_modules是项目的依赖的的文件模块,之后导入的包也会被放在其中,比如连接数据库的mongoose模块,后面会详细讲。

6、public 是项目的静态资源文件集,很容易看出图片、css文件、js文件都放在这里。

7、routes 是项目的路由模块,其中已经默认了index.js和user.js文件。在这里其实也包括一般后台语言中的控制器内容,当然在大的项目上是可以分离开来的。

8、views是项目的模版文件,是jade模版引擎,这个模版很简洁,但是坑也比较多,比如对空格的要求都非常严格,多一个少一个空格都会报错的,曾经踩过很多坑,其实它的性能也不是很高还不如用ejs呢。 

五、安装mongoDB

1、同样在官网(http://www.mongodb.org/downloads)上直接下载msi文件

2、简单的下一步进行安装,有默认的就让其默认,有选择的就全选了

3、然后配置环境变量,和node的一样不再累述,不过可以放中图,哈哈哈……

  node.js连接mongoDB数据库 快速搭建自己的web服务

4、接下来是启动mongoDB服务

5、通过命令:mongod --dbpath f:\MongoDB\data 其中 f:\MongoDB\data是文件存放路径,看到如下信息说明成功了

 node.js连接mongoDB数据库 快速搭建自己的web服务

6、MongoDB监听的是27017端口,同时打开浏览器输入http://127.0.0.1:27017,则会看到如下提示:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

7、然后,再打开一个cmd,输入mongo命令链接数据库,出现如下提示:

 

2015-05-02T17:10:19.467+0800 I CONTROL Hotfix KB2731284 or later update is not installed, will zero-out data files MongoDB shell version: 3.0.2 connecting to: test

8、这样windows环境下的monogDB就安装成功了。

补充:

9、如果你嫌每次用命令打开服务麻烦的话,可以写成批处理文件,就是新建一个后缀.bat的文件,写上如下代码:

start mongod --dbpath F:\MongoDB\data

10、当然了,你也可以将MongoDB以服务的方式启动,不过我觉得在学习的过程中用处不大,小伙伴们可以自己尝试一下,如果有需要的话,我在后面会补上。

11、要是觉得命令行不好用,推荐一个带图形化界面的软件:MongoVUE,就和navicat差不多,它有免费版的,就是功能少点,但学习过程中完全足够了

六、在node项目中使用monogDB

1、导入monogDB连接模块,express 官方介绍的是mongoskin模块,这个我就不说了,这里介绍通过mongoose安装

2、在myapp项目下执行命令 npm install mongoose -save 安装保存到node_modules,也可以在package.json中配置"mongoose": "^4.4.12",然后命令npm install 安装。

3、在app.js文件中

 a、导入mongoose模块:  

var mongoose = require('mongoose');
  b、创建数据库连接

mongoose.connect('mongodb://localhost/myDB') //连接本地数据库
 4、在项目根目录下新建文件夹schemas,这个是数据集模块,在模块下新建users.js文件

var mongoose = require('mongoose');

//申明一个mongoons对象
var UsersSchema = new mongoose.Schema({
 name: String,
 paw: String,
 meta: { 
  createAt: {
   type: Date,
   default: Date.now()
  },
  updateAt: {
   type: Date,
   default: Date.now()
  }
 }
})

//每次执行都会调用,时间更新操作
UsersSchema.pre('save', function(next) {
 if(this.isNew) {
  this.meta.createAt = this.meta.updateAt = Date.now();
 }else {
  this.meta.updateAt = Date.now();
 }

 next();
})

//查询的静态方法
UsersSchema.statics = {
 fetch: function(cb) { //查询所有数据
  return this
   .find()
   .sort('meta.updateAt') //排序
   .exec(cb) //回调
 },
 findById: function(id, cb) { //根据id查询单条数据
  return this
   .findOne({_id: id})   
   .exec(cb)
 }
}

//暴露出去的方法
module.exports = UsersSchema

5、在根目录新增modules文件,这个是数据模型模块,在模块下新增users.js文件

var mongoose = require('mongoose')
 var UsersSchema = require('../schemas/users') //拿到导出的数据集模块
 var Users = mongoose.model('Users', UsersSchema) // 编译生成Movie 模型
 
 module.exports = Users

 6、在routes文件中的users.js文件中添加路由控制器代码

var express = require('express');
var mongoose = require('mongoose');//导入mongoose模块

var Users = require('../models/users');//导入模型数据模块

var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
 res.send('respond with a resource');
});

//查询所有用户数据
router.get('/users', function(req, res, next) {
 Users.fetch(function(err, users) {
  if(err) {
   console.log(err);
  }  
  res.render('users',{title: '用户列表', users: users}) //这里也可以json的格式直接返回数据res.json({data: users});
 })
})
module.exports = router;

7、在views文件下新增users.jade

extends layout

block content
 h1= title //jade取值方式
 ul
 each user in users //jade模版的遍历方式
  li
  h4 #{user.name} 
  span #{user.paw}

8、最后在浏览器中打开网址:http://localhost:3000/users/users,查看效果。到这里一个从数据库到前端展现的项目就完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
jQuery的ready方法详解
Nov 27 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
Aug 28 Javascript
AngularJs Modules详解及示例代码
Sep 01 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
Feb 22 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
vue2.0 如何在hash模式下实现微信分享
Jan 22 Javascript
jQuery操作选中select下拉框的值代码实例
Feb 07 jQuery
JS图片懒加载技术实现过程解析
Jul 27 Javascript
js如何准确获取当前页面url网址信息
Sep 13 #Javascript
基于javascript实现图片切换效果
Apr 17 #Javascript
非常棒的jQuery图片轮播效果
Apr 17 #Javascript
jQuery实现的倒计时效果实例小结
Apr 16 #Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
Apr 16 #Javascript
jQuery实现无限往下滚动效果代码
Apr 16 #Javascript
jQuery遍历json的方法分析
Apr 16 #Javascript
You might like
PHP获取Exif缩略图的方法
2015/07/13 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
layui表格实现代码
2017/05/20 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Django forms组件的使用教程
2018/10/08 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
利用python 下载bilibili视频
2020/11/13 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
高中生毕业自我鉴定范文
2013/12/22 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
《中华少年》教学反思
2014/02/15 职场文书
环保倡议书500字
2014/05/15 职场文书
三严三实对照检查材料
2014/09/22 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
护士求职自荐信
2015/03/25 职场文书
手机销售员岗位职责
2015/04/11 职场文书
在校学生证明格式
2015/06/24 职场文书
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL