node+MongoDB+实战

写在前面

关于 Nodejs,相信看这篇的文章的小伙伴已经了解了不少,有一些了 Nodejs 基础。但是 Nodejs 如何应用,如何用 Nodejs 搭建在服务器上,我想好多小伙伴想知道,在这里分享我的心得体会,希望对你的工作学习有所帮助。 服务器的搭建有很多种,比如 Java,PHP,而我首选 Node.js。为什么?因为快。Node.js 入门快,相比其他语言更容易进入后台的世界;安装快,配置简单;命令简单易学。但是对于许多童鞋来说,学习了 Node.js 的基础知识,却不知道该怎样应用 Node.js ,如何实践。

这次我就帮助童鞋快速入门,尽快应用起 Node.js,在实战中学习 Node.js,对工作和学习都有更好的帮助。

1、利用基于 Node.js 的 Express 快速搭建项目。
2、介绍 Express 项目结构。
3、学习如何连接 MongoDB 数据库,利用 Node.js 操作 MongoDB 数据库。
4、Express 的项目是 .jade 页面,如何改为 .html 页面。
5、学习如何修改目录结构,使其可以在真实的项目中应用

1.利用 Nodejs 快速搭建项目

首先安装 Express

npm install express-generator -g    

用Express快速生成项目

express demo
cd demo
npm install

运行项目,检测是否搭建成功

npm run start

在浏览器打开http://localhost:3000 ,这个地址是Express快速搭建项目默认之地址,在bin目录下的www文件里,如图

企业微信截图_ef9c5153-4d13-463c-94e7-be4170e11f7a.png

项目搭建完毕,是不是很快。这就是我喜欢Node的地方

2.Express目录结构介绍

  • bin:项目的启动文件,默认www
  • node_modules:存放项目所有的依赖库,默认body-parser、cookie-parser、debug、jade、express、morgan、serve-favicon。
  • public:静态资源文件夹,默认images、javascripts、stylesheets。
  • routes:路由文件
  • views:页面文件,jade模板,默认error.jade、index.jade、layout.jade。本人平常用的html模板,下面将讲下如何修改
  • package.json:项目依赖配置,做过java后台的,可以跟maven对比下,差不多。
  • app.js:应用核心配置文件,项目入口,程序入口。
enter image description here

3.连接MongDB数据库

打开终端,运行命令


 npm install mongolass -s

在bin目录下添加文件,mongo_base.js,里面的代码如下

const Mongolass = require('mongolass');
const mongolass = new Mongolass();

exports.db = { mongolass: mongolass };
const db = exports.db;

let connected = [];
exports.OnConnected = function (fn) {
    if (fn) {
        connected.push(fn);
    }
};

//'mongodb://localhost:27017/testdb'
exports.connectDB = function (conn) {
    return mongolass.connect(conn).then(function () {

        //================USER RELATED==================
        db.test = mongolass.model('test', {
            name:{type:'string'},

        });
        db.test.insert({name:'test'}).exec()

        connected.forEach(function (oneFn) {
            if (oneFn) {
                oneFn();
            }
        });

    });

};

在www文件里添加代码

require('./mongo_base').connectDB('mongodb://localhost:27017/testdb');

我们的MongDB连接成功。 启动电脑的MongDB,然后重启项目。 下面检查是否我们成功了。 打开终端,然后运行命令,进入到mongdb。

mongo

然后运行命令,查看是否添加上数据库testdb

show dbs

enter image description here

好了,我们的项目MongoDB数据库添加完毕。

4.Express的项目是.jade页面,如何修改为.html的页面。

进入根目录,输入命令

npm install ejs -s

找到根目录下的app.js,加入代码

var ejs = require('ejs');  //引入的ejs插件
app.engine('html', ejs.__express);//设置html引擎
app.set('view engine', 'html');//设置视图引擎

在app.js里,去掉代码

app.set('view engine', 'jade');

重启服务,在view里添加html页面,同时在routes里或者在app.js里添加控制器,就可以访问html文件了。实例代码如下,在浏览器访问http://localhost:3000/b

enter image description here

5.如何修改目录,使其可以在真实的项目中应用

在这个项目中我们想以mvc的模式开发。那么如何修改目录呢,可以达到我们的目的。下面注意我说的,新建目录和新建文件,不要弄混。

1.首先新建目录,auth,把上面的建的mongo_base.js放在这个目录里。然后新建文件index.js,代码如下

let MG = require('./mongo_base.js');

exports.db = MG.db;
exports.connectDB = MG.connectDB;
exports.OnConnected = MG.OnConnected;

2.修改bin目录下www文件里的关于mongo_base.js的引入调用。改后如下

enter image description here

3.在routes下新建两个目录controller,db。

  • controller:就是我们的mvc的c,用于控制我们整个程序,我们的逻辑代码在这里编写。
  • db:就是我们的mvc中的m,用于数据库表的创建。

把index.js、users.js放在controller的目录里。请注意修改app.js代码里关于这两个文件的路径引入。

4.在db目录下新建文件user.js。用于在数据库存储用户。修改后目录如下图。

enter image description here

5.在user.js里编写代码


const db = require('../../auth').db;
exports.OnConnected = require('../../auth').OnConnected;

const onConnect = function () {
    const mongolass = db.mongolass;

    //===============DEVICE RELATED==================

    // socket.io room. Connect it with `http://{server}/{roomId}`
    db.user = mongolass.model('user', {
        nickname:{type:'string'},
    });

};

exports.OnConnected(onConnect);
exports.db = db;

6.修改controller下的index.js,修改后如下

var express = require('express');
var router = express.Router();
const MG = require('../db/user');
let dbTable;
MG.OnConnected(function () {
    dbTable = MG.db.user;
});

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});
router.get('/test', function(req, res, next) {
       return dbTable.insert({nickname:'abc'}).exec().then(function () {
           res.send('存储成功');
       })

});

module.exports = router;

7.重新启动项目,在浏览器中输入http://localhost:3000/test ,如下图!

enter image description here

写在后面

这篇文章每写一步,我都会自己运行,希望看到这篇文章的童鞋可以入门express的实战,并在实战中创建自己的架构。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336