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 相关文章推荐
Javascript四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
input标签内容改变的触发事件介绍
Jun 18 Javascript
javascript trim函数在IE下不能用的解决方法
Sep 12 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 Javascript
基于jquery实现全屏滚动效果
Nov 26 Javascript
JavaScript 数组中最大最小值
Jun 05 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
Apr 13 Javascript
AngularJS实现的回到顶部指令功能实例
May 17 Javascript
js实现HTML中Select二级联动的实例
Jan 05 Javascript
了解前端理论:rscss和rsjs
May 23 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
phpfans留言版用到的install.php
2007/01/04 PHP
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python Celery定时任务的示例
2018/03/13 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
外包公司软件测试工程师
2014/11/01 面试题
自我鉴定的范文
2013/10/03 职场文书
考试违纪检讨书
2014/02/02 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
学习党代会心得体会
2014/09/05 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python