咳咳,终于迈出这一步了...这篇文章将是边学边写的真正笔记...用于mark下学习过程当中的点滴~node
开篇先把我学习参考的文章来源给出,以表示对前人的尊敬:git
https://github.com/nswbmw/N-blog/wiki/_pagesgithub
Step01mongodb
首先,先安装一堆东西,固然我默认的已经把 node 给装好了,接下来要安装的,是项目开发过程当中用到的东东~数据库
至于下面装的是什么东东,不知道的本身百度去,这种概念性问题不在笔记之列。express
全局安装 expressnpm
install -g express-generator
全局安装 supervisorjson
npm install -g supervisor
下载并安装 mongoDB浏览器
官网地址:https://www.mongodb.org/downloadscookie
mongoDB 也有可视化工具,名为 Robomongo,官网地址:http://www.robomongo.org/
Step02
上面几个玩意都安装好后,环境已备,能够开始码字了。
先建立一个 express 项目吧,在你想建立项目的目录下执行下面命令(projectName 是你要建立的项目名称):
express -e projectName
项目建立后,进入刚建好的项目根目录,执行
npm install
安装项目依赖的 node 模块
等模块安装好以后,你就能够执行下面的命令,运行项目程序了
supervisor ./bin/www
执行上面命令后,打开浏览器,在地址栏中输入 http://127.0.0.1:3000/ 而后看到浏览器里显示 Express 的欢迎界面,说明项目建立运行成功。
Step03
接下来,咱们要连接数据库,并尝试数据写入和数据读取
首先,咱们先在项目根目录找到 package.json 文件
而后打开文件,找到 dependencies 在加上下面几个项目依赖模块
"bson": "~0.4.19", "connect-flash": "~0.1.1", "connect-mongo": "~0.4.1", "express-session": "~1.9.1", "mongodb": "~1.4.15"
而后再执行
npm install
安装上面添加的几个依赖模块
打开 app.js 将它修改为以下:
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var session = require('express-session'); var MongoStore = require('connect-mongo')(session); var flash = require('connect-flash'); var app = express(); //设置模版引擎
app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.set(flash()); //设置标题栏小图标
//app.use(favicon(path.join(__dirname, 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); routes(app); //404异常处理
app.use(function (req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); //打印错误信息
app.use(function (err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;
而后打开 routes/index.js 将它修改为以下:
var User = require('../modules/user'); module.exports = function(app) { app.get('/', function (req, res, next) { res.render('index', { title: 'Express' }); }); app.get('/saveUser', function (req, res, next) { User.save({ name: 'Mike', password: '123456', email: 'qwe@163.com' }, function (err, user) { res.send('保存用户数据成功!'); }); }); app.get('/getUser', function (req, res, next) { User.get('Mike', function (err, user) { res.send({ email: user.email }); }); }); };
routes/users.js 已经无用,能够删掉。
接下来,在根目录下建立一个 modules 目录,而后在 modules 目录下再建立一个 dataService 目录,全部和数据操做相关的 js 模块都将放在 modules/dataService 目录下
接下来,在 modules/dataService 下建立两个文件 conn.js 和 user.js
conn.js 的代码以下:
var settings = { cookieSecret: 'myProject', db: 'dataBaseName', host: 'localhost', port: 27017 }, mongodb = require('mongodb'), Db = mongodb.Db, Server = mongodb.Server; module.exports = new Db(settings.db, new Server(settings.host, settings.port), { safe: true });
user.js 的代码以下:
var mongodb = require('./conn'); var User = {}; //存储用户信息
User.save = function (opts, callback) { //要存入数据库的用户文档
var user = { name: opts.name, password: opts.password, email: opts.email }; //打开数据库
mongodb.open(function (err, db) { if (err) { return callback(err);//错误,返回 err 信息
} //读取 users 集合
db.collection('users', function (err, collection) { if (err) { mongodb.close(); return callback(err);//错误,返回 err 信息
} //将用户数据插入 users 集合
collection.insert(user, { safe: true }, function (err, user) { mongodb.close(); if (err) { return callback(err);//错误,返回 err 信息
} callback(null, user[0]);//成功!err 为 null,并返回存储后的用户文档
}); }); }); }; //读取用户信息
User.get = function (name, callback) { //打开数据库
mongodb.open(function (err, db) { if (err) { return callback(err);//错误,返回 err 信息
} //读取 users 集合
db.collection('users', function (err, collection) { if (err) { mongodb.close(); return callback(err);//错误,返回 err 信息
} //查找用户名(name键)值为 name 一个文档
collection.findOne({ name: name }, function (err, user) { mongodb.close(); if (err) { return callback(err);//失败!返回 err 信息
} callback(null, user);//成功!返回查询的用户信息
}); }); }); }; module.exports = User;
嗯嗯嗯...思考了好一会,代码部分应该已经完成了。但别急着运行,还有一些准备工做须要作。
打开 mongoDB 的安装根目录(拿我本身举例,我安装的是32位版本,安装根目录为:C:\Program Files (x86)\MongoDB 2.6 Standard)
在该目录下建立一个文件夹,名称就是你的数据库名
而后启动命令行工具,进入 mongoDB 的安装根目录下的 lib 目录,而后执行下面命令:
mongod --dbpath ../dataBaseName/
dataBaseName 指是你的数据库名
以上命令的意思是:设置 dataBaseName 文件夹做为咱们工程的存储目录并启动数据库
注意:必定要先建立目录(或者已经存在目录),再执行上面的命令,才能成功启动数据库,不然会报错
数据库成功启动以后,咱们再从新启动一下咱们的 node 服务端程序,就用上文提到过的命令:
supervisor ./bin/www
而后打开浏览器,访问 http://127.0.0.1:3000/saveUser ,就能看到界面上显示 “保存用户数据成功!”
再访问 http://127.0.0.1:3000/getUser ,就能看到 {"email":"qwe@163.com"}
再使用 Robomongo 看看数据库是否真的成功写入了信息,若是成功找到和代码中同样的数据,说明写入成功了~~
OK~至此,咱们就实现了一个最基础的服务端读写数据库应用雏形了。
补刀几句,这篇笔记通篇没有多少任何关于概念以及工具的说明。
由于它就是一篇执行记录笔记,记录搭建一个 最基础的服务端读写数据库应用雏形 的各个步骤。
若是要了解上面提到的工具以及代码的含义,请本身另行百度,或者去细看我开篇时给出的文章(里面各类概念说明很是详细)