node服务端搭建学习笔记
咳咳,终于迈出这一步了...这篇文章将是边学边写的真正笔记...用于mark下学习过程中的点滴~
开篇先把我学习参考的文章来源给出,以表示对前人的尊敬:
https://github.com/nswbmw/N-blog/wiki/_pages
Step01
首先,先安装一堆东西,当然我默认的已经把 node 给装好了,接下来要安装的,是项目开发过程中用到的东东~
至于下面装的是什么东东,不知道的自己百度去,这种概念性问题不在笔记之列。
全局安装 express
install -g express-generator
全局安装 supervisor
npm install -g supervisor
下载并安装 mongoDB
官网地址:https://www.mongodb.org/downloads
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~至此,我们就实现了一个最基础的服务端读写数据库应用雏形了。
补刀几句,这篇笔记通篇没有多少任何关于概念以及工具的说明。
因为它就是一篇执行记录笔记,记录搭建一个 最基础的服务端读写数据库应用雏形 的各个步骤。
如果要了解上面提到的工具以及代码的含义,请自己另行百度,或者去细看我开篇时给出的文章(里面各种概念说明非常详细)
node服务端搭建学习笔记的更多相关文章
- nodejs服务端开发学习笔记
		正在学习中,不断改错... 学习了一段时间nodejs,对其中的很多东西还不是很理解,在网上看过很多的例子,希望通过自己的一些总结让自己了解的更全面些,同时也作为学习笔记留存备忘. 准备工作 node ... 
- 服务端 | Nodejs 学习笔记(一)
		Node.js 前言: 2009年面世 nodejs.org 官网 https://www.npmjs.com/ 模块社区 github.com 仓库 stackoverflow.com 问答社区 ... 
- Node服务端极速搭建 - nvmhome
		本文意在让你掌握极速搭建Node服务端(任何Project) $ whoami name: kelvin email: kelvv@outlook.com homepage: www.kelvv.co ... 
- Node服务端极速搭建 -- nvmhome
		> 本文意在让你掌握极速搭建Node服务端(任何Project) ```$ whoaminame: kelvinemail: kelvv@outlook.comhomepage: www.kel ... 
- go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)
		目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ... 
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
		目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ... 
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
		目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ... 
- go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)
		目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ... 
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
		目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ... 
随机推荐
- [Ubuntu Version] 如何在terminal 查看当前 ubuntu的版本号
			命令: locate locate /etc/*release/etc/lsb-release/etc/os-release 命令: catcat /etc/os-releaseNAME=" ... 
- Android-JVM中的多线程&垃圾回收
			Java语言是为数不多支持多线程技术的编程语言,而这多线程就不得不提到JVM虚拟机 先看代码案例:(JVM收垃圾) package android.java.thread; class Demo { ... 
- Python学习-18.Python中的错误处理(三)
			在某些情况下,我们需要定义自己的异常并且抛出 先定义一个错误: class MyError(BaseException): def __init__(self): pass 上面定义了一个叫MyErr ... 
- .NET在IE10下的回传BUG修复
			以前我也没注意到,直到有次公司新配了台机器做测试服务器,在测试过程中意外发现凡是涉及PostBack的操作仅在IE10下都无效,其他版本浏览器都没有问题,本机调试也没有问题. 这也就是说在程序相同的情 ... 
- 一个初学者的指南,使用D3做数据绑定
			一个初学者的指南,使用D3做数据绑定 D3.js 是个强大的数据可视化库,可以做出惊艳的图表.比如:气泡图,线图和条形图--只需要很少行的代码 随着初学者对JavaScript的理解,可以将数组或者对 ... 
- JPA注解指南
			PA注解持久化类很方便,需要jar包:ejb3-persistence.jar.我用以下三个类来说明用法. @SuppressWarnings("serial") @Entity ... 
- 委托发展史(Linq操作符)
			嗯~这篇就讲讲Linq吧! 之前讲过Lambda最后进化到了令人发指的地步: Func<string, int> returnLength; returnLength = text =&g ... 
- Hbuilder系列索引
			『原创』手把手教你搭建一个实用的油耗App(一) 
- Kubernetes性能测试实践
			本文由 网易云 发布. 概述 随着容器技术的发展,容器服务已经成为行业主流,然而想要在生产环境中成功部署和操作容器,关键还是容器编排技术.市场上有各种各样的容器编排工具,如Docker原生的Swar ... 
- Mac OS 10.12 - Gogland和在Windows中使用的不同!!
			刚刚在Mac OS 10.12用Gogland写了一个小小的GO语言测试程序,经过一番尝试才算把Gogland配置好,写出这个测试程序!Gogland在Mac OS 10.12里和Windows里面确 ... 
