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中each()的使用方法说明
Aug 19 Javascript
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
JS控制弹出新页面窗口位置和大小的方法
Mar 02 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
Vue.js 2.0学习教程之从基础到组件详解
Apr 24 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
vue 请求后台数据的实例代码
Jun 22 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
ES6中定义类和对象的方法示例
Jul 31 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
yii框架中的Url生产问题小结
2012/01/16 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
化工机械应届生求职信
2013/11/04 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
白酒代理协议书范本
2014/10/26 职场文书
2014年少先队工作总结
2014/12/03 职场文书
英语邀请函范文
2015/02/02 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
2015年社区工作总结
2015/04/08 职场文书
生产车间管理制度
2015/08/04 职场文书
导游词之青岛崂山
2019/12/27 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android