安装:
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启动。