node.js+mongodb

安装:
Node.js : 0.10.32

Express : 4.10.2

MongoDB : 2.6.1

sublime3

过程中要用到的东西

amaze ui前端框架,放在public文件夹下与其他并列

vue和jquery:vue.js ,jquery-2.1.4.min.js,JSXTranformer.js放在javascripts里

安装的包有:

"async": "^1.5.0",

"bluebird": "^3.3.5",

"body-parser": "~1.13.2",

"connect-flash": "^0.1.1",

"connect-mongo": "^0.8.2",

"cookie-parser": "~1.3.5",

"debug": "~2.2.0",

"ejs": "~2.3.3",

"express": "^4.13.4",

"express-session": "^1.12.1",

"mongodb": "^2.0.47",

"morgan": "~1.6.1",

"multer": "0.1.6",

"net-snmp": "^1.1.14",

"node-schedule": "^0.6.0",

"pm2": "^0.15.10",

"redis": "^2.5.3",

"rounded-timestamp": "^1.0.0",

"serve-favicon": "~2.3.0",

"wechat": "^2.0.3",

"wechat-api": "^1.19.0",

"wechat-oauth": "^1.1.0",

"wechat-pay": "^0.2.2",

"weui": "^0.4.3"

一、安装好node后:

打开命令行,输入: npm install -g express-generator 进行express的安装。

输入express –ejs 项目名 新建一个ejs模板的项目

安装各种包:npm install 包名字 –save

打开cmd 进入文件所在目录下输入npm start运行。

二、修改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 app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
routes(app);
app.listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));

});
module.exports = app;

三、修改routes中的index.js如下:

var express = require('express');
module.exports = function(app) {
  app.get('/', function (req, res) {
    res.render('index', { title: 'Express' });
  });
};

​四、模板引擎:

我们通过 app.use(express.static(path.join(__dirname, ‘public’)))设置了静态文件目录为 public 文件夹,所以上面代码中的 href=’/stylesheets/style.css’ 就相当于href=’public/stylesheets/style.css’ 。可以使用<%- include header% >来包含header.ejs页面。

ejs 的标签系统非常简单,它只有以下三种标签:

<% code %>:JavaScript 代码。
<%= code %>:显示替换过 HTML 特殊字符的内容。
<%- code %>:显示原始 HTML 内容。

五、连接数据库
1、安装 MongoDB ,并在 mongodb 文件夹里新建 数据库 文件夹作为我们的存储目录。进入到 bin 目录下:输入: mongod –dbpath ../数据库名/ 或者: .mongod –dbpath ../数据库名/

2、打开cmd,跳入到当前项目下,在node中安装mongodb包,npm install mongodb –save,安装完成后 在package.json下的 dependencies 会自动增加”mongodb”: “^2.2.8”。

3、在工程根目录下新建 models 文件夹,并在 models 文件夹下新建 db.js , settings.js 文件, settings.js 文件的内容如下 :

module.exports = {
  cookieSecret: 'myblog', 
  db: 'xincheng', 
  host: 'localhost',
  port: 27017
}; 

其中 db 是数据库的名称,host 是数据库的地址,port是数据库的端口号,cookieSecret 用于 Cookie 加密与数据库无关,我们留作后用。

db.js的内容如下:

 var settings = require('./settings'),
        Db = require('mongodb').Db,
        Connection = require('mongodb').Connection,
        Server = require('mongodb').Server;
    module.exports = new Db(settings.db, new Server(settings.host, settings.port),
 {safe: true});​

其中通过 new Db(settings.db, new Server(settings.host, settings.port), {safe: true});设置数据库名、数据库地址和数据库端口创建了一个数据库连接实例,并通过 module.exports 导出该实例。这样,我们就可以通过 require 这个文件来对数据库进行读写了。

4、打开 app.js,在 var routes = require(‘./routes/index’);下添加:var settings = require(‘./models/settings’);

5、安装包 express-session 和 connect-mongo

6、在app.js下添加如下代码

var session = require(‘express-session’);
var MongoStore = require(‘connect-mongo’)(session);
app.use(session({
secret: settings.cookieSecret,
key: settings.db,//cookie name
cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
store: new MongoStore({
db: settings.db,
host: settings.host,
port: settings.port
})
}));

上面适用于connect-mongo0.8.2版本,如果不使用老版本, 最新版需要改成如:

store: new MongoStore({
  url: 'mongodb://localhost/blog'
})

7、提交表单

ejs页面中 ,input框要有name属性

8、数据库代码

在models下新建user.js,

var mongodb = require('./db');
var Teacher = function (teacher) {
    this.trueName = teacher.trueName;
    this.password = teacher.password;
    this.school = teacher.school;
    this.institute = teacher.institute;
    this.number = teacher.number;
};
module.exports = Teacher;
//存储
Teacher.prototype.save = function (callback) {
    var date = new Date();
    var time = date.getFullYear() + '-'
        + date.getMonth() + '- ' + date.getDate() + ' '
        + date.getHours() + ':' + date.getMinutes() + ':'
        + date.getSeconds();
   var id = date.getFullYear() + '-' + date.getMonth() + '-' + date.getDate() + date.getHours() + date.getMinutes() + date.getSeconds() + Math.random().toString(36).substr(2,16);
    var teachers = {
        _id:id,
        trueName: this.trueName,
        school: this.school,
        institute: this.institute,
        number: this.number,
        password: this.password,
        time: time
    };
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('teachers', function (err, teacher) {
            if (err) {
                mongodb.close();
                return callback(err);
            }
            teacher.insert(teachers, {
                safe: true
            }, function (err, teacher) {
                mongodb.close();
                if (err) {
                    return callback(err);
                }
                callback(null, teacher);
            });
        });
    });
};

//获取所有
Teacher.getAll = function (query, callback) {
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }
       db.collection('teachers', function (err, teacher) {
            if (err) {
                mongodb.close();
                return callback(err);
            }
            teacher.find(query).toArray(function (err, docs) {
                mongodb.close();
                if (err) {
                    return callback(err);
                }
                callback(null, docs);
            });
        });
    });
};
Teacher.get = function (query, callback) {
    mongodb.open(function (err, db) {
        console.log(1);
        if (err) {
            return callback(err);
        }
        db.collection('teachers', function (err, teacher) {
            console.log(2);
            if (err) {
                mongodb.close();
                return callback(err);
            }
           teacher.find(query).toArray(function (err, docs) {
                console.log(3);
                mongodb.close();
                if (err) {
                    return callback(err);
                }
                callback(null, docs[0]);
            });
        });
    });
};

Teacher.getOne = function (query, callback) {
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('teachers', function (err, teacher) {
            if (err) {
                mongodb.close();
                return callback(err);
            }
            teacher.findOne(query, function (err, doc) {
                mongodb.close();
                if (err) {
                    return callback(err);
                }
                callback(null, doc);
            });
        });
    });
};
//更新数据

Teacher.update = function (query, data, callback) {
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        db.collection('teachers', function (err, teacher) {
            if (err) {
                mongodb.close();
                return callback(err);
            }
            teacher.update(query, {$set: data}, {multi: true},
                function (err, result) {
                    mongodb.close();
                    if (err) {
                        return callback(err);
                    }
                    callback(null, result);
                });
        });
    });
};
//删除

Teacher.remove = function(query,callback){

    mongodb.open(function(err,db){

        if(err){

            return callback(err);

        }

        db.collection('teachers',function (err,teacher){

            if(err){

                mongodb.close();

                return callback(err);

            }

            teacher.remove(query,function (err,result){

                mongodb.close();

                if(err){

                    return callback(err);

                }

                callback(null,result);
            });
        });
    });
};
//删除一条
Teacher.updatePull = function(query,data,callback){
    mongodb.open(function(err,db){
        if(err){
            mongodb.close();
            return callback(err);
        }
        db.collection('teachers',function(err,teacher){
            if(err){
                mongodb.close();
                return callback(err);
            }
            teacher.update(query,{$pull:data},function(err,result){
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null,result);
            });
        });
    });
};
//增加一条
Teacher.updatePush = function(query,data,callback){
    mongodb.open(function(err,db){
        if(err){
            mongodb.close();
            return callback(err);
        }
        db.collection('teachers',function(err,teacher){
            if(err){
                mongodb.close();
                return callback(err);
            }
            teacher.update(query,{$push:data},function(err,result){
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null,result);
            });
        });
    });
};

9、在routes下的index.js下添加:

var crypto = require(‘crypto’),

User = require('../models/user.js');

之后便可以调用models中的方法了:

app.post('/reg', function (req, res) {
  var name = req.body.name,
      password = req.body.password,
      password_re = req.body['password-repeat'];
  var newUser = new User({
      name: name,
      password: password,
      email: req.body.email
  });
  //检查用户名是否已经存在 
  User.get(newUser.name, function (err, user) {
    if (err) {
      return res.redirect('/');
    }
    if (user) {
      return res.redirect('/reg');//返回注册页
    }
    //如果不存在则新增用户
    newUser.save(function (err, user) {
      if (err) {
        return res.redirect('/reg');//注册失败返回主册页
      }
      req.session.user = newUser;//用户信息存入 session
      res.redirect('/');//注册成功后返回主页
    });
  });
});

每次我们更新代码后,都需要手动停止并重启应用,使用 supervisor 模块可以解决这个问题,每当我们保存修改的文件时,supervisor 都会自动帮我们重启应用。通过: npm install -g supervisor安装,安装好后通过supervisor app.js启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值