19

前言

经过上一篇经济基础构建的完成,那么现在正式开始码代码吧!

项目架构

clipboard.png

起HTTP服务

首先建立/server/app.js文件,先把起服务所需的模块引入进来,以下介绍两种起HTTP服务的方法。

1.使用Node.js 内在模块http

var http = require('http');
http.createServer(function (request, response) {
    // 发送响应数据 "Hello Node.js"
    response.end('Hello Node.js');
}).listen(8888); // 监听8888端口
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

2.使用express框架
本项目使用node.js的express框架来起HTTP服务器。express官网,内有对应的简单教程、API等,可自行查阅

    const express = require('express'), //加载express模块
          app = express(); //启动一个web服务器
    
    app.get('/',function(req,res){
        res.send('Hello Node.js');
    })
    
    const server = app.listen(3000,function(){
        let port = server.address().port;
        console.log('app listening at http://%s:%s','localhost',port);
    });

保存后,命令行进入app.js文件所在文件夹,运行命令node app.js,然后浏览器访问http://localhost:3000,即会查看到返回'Hello Node.js'。

clipboard.pngclipboard.png

MongoDB可视化工具Robomongo

为了测试方便,我们首先要往我们本地的MongoDB数据库中插入一些数据。为了方便使用,MongoDB也有类似mysql navicat的图形化管理工具Robomongo 1.0.0,下载地址:https://robomongo.org/download,下载安装即可。

1.打开Robomongo,点击左上角file->connect(快捷键ctrl+N),在弹出来的框中点击create来创建连接。

clipboard.png

2.输入连接名字,以及地址名,端口默认为27017,地址address和端口一般不用更改。

clipboard.png

这样test为名字的MongoDB连接就创建了。

3.MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB和平常使用的MySQL是有比较大的区别的:

clipboard.png

4.我们首先点击左侧刚刚创建的test连接,鼠标右键单击 create database,输入是数据库名testDb点击create创建即可。

clipboard.png

5.鼠标左键单击刚刚创建的testDb数据库,创建collection(即为平常使用的数据库中所说的table表),点击create即可创建user 集合成功。

clipboard.png

6.下面我们开始往user collection集合中插入数据:鼠标右键单击user collection -> insert documet(插入文档,即我们平常使用的sql数据库中的行)。

7.MongoDB数据库中文档(每一行的数据)的数据结构和JSON基本一样,所有存储在集合中的数据都是BSON格式,BSON是一种类JSON的一种二进制形式的存储格式,简称Binary JSON。因此,我们在插入数据时,只要像JSON格式那样输入我们想要插入的数据。点击save保存即可成功插入数据。

{
    userName:'dodo',
    sex:18,
    sex:'女',
    job:'font-end Engineer'
}

clipboard.png

8.双击user collection即可看到我们刚刚插入的那条数据,MongoDB的主键自动将_id字段设置为主键。

clipboard.png

开始连接数据库

1.使用MongoDB原生自带的API来创建连接,直接在/server/app.js输入以下代码

var MongoClient = require('mongodb').MongoClient,
    DB_CONN_STR = 'mongodb://localhost:27017/testDb'; # 数据库为 testDb
var selectData = function(db, callback) {  
  //连接到user表  
  var collection = db.collection('user');
  //查询数据
  var whereStr = {"userName":'dodo'};
  collection.find(whereStr).toArray(function(err, result) {
    if(err)
    {
      console.log('Error:'+ err);
      return;
    }     
    callback(result);
  });
}
 
MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("连接成功!");
  selectData(db, function(result) {
    console.log(result);
    db.close();
  });
});

2.本项目使用Mongoose来配合MongoDB操作数据库
mongoose是mongoDB的一个对象模型工具,是基于node-mongodb-native开发的mongoDB的nodejs驱动,可以在异步的环境下执行。同时它也是针对mongoDB操作的一个对象模型库,封装了mongoDB对文档的一些增删改查等常用方法,让nodejs操作mongoDB数据库变得更加容易。

// 加载所需要的模块
const mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
const Schema = mongoose.Schema;

const UserSchema = new mongoose.Schema({
    username: String,//用户名
    sex: String,// 性别
    age: Number, // 年龄
},{collection:'user'}) 
// 注意这里一定要带有collection,否则mongoose会在下面model时对user添加后缀s.

const Models = {
    User : mongoose.model('user', UserSchema)
};

/**
 * 创建数据库名称并连接
 * Connecting to Mongod instance.
 */
const dbHost = 'mongodb://localhost/testDb';
mongoose.connect(dbHost);
const db = mongoose.connection;
db.on('error', function () {
    console.log('Database connection error.');
});
db.once('open', function () {
    console.log('The Database has connected.')
});

module.exports = Models;

dodomonster
2.1k 声望630 粉丝

DodoMonster want to be an excellent Web Font-End Developer.Fighting!!!