这篇文章主要为大家详细介绍了 node.js 连接 mongoDB 数据库,如何快速搭建自己的 web 服务,感兴趣的小伙伴们可以参考一下
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
一、写在前面
人人都想成为全栈码农,作为一个 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、在浏览器中打开 {aa0aa} 网址就可以看到这个应用了。
默认情况下用的模版引擎是 jade,项目里也已经配置好了这个模版。
四、介绍 express 生成器的项目
1、myapp 项目的机构如下:
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 的一样不再累述,不过可以放中图,哈哈哈……
4、接下来是启动 mongoDB 服务
5、通过命令:mongod --dbpath f:\MongoDB\data 其中 f:\MongoDB\data 是文件存放路径,看到如下信息说明成功了
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,查看效果。到这里一个从数据库到前端展现的项目就完成了。
来源: http://www.phperz.com/article/17/0328/266285.html