由于我们使用的是MongoDB数据库,所以,对应该数据库不清楚的朋友,可以参考MongoDB快速入门,里面涵盖了MongoDB的全部内容。首先我们根据上节讲的内容,把项目的文件夹创建好,然后在不同的文件夹下创建文件。
(注:我用的编辑器是webStorm)
创建MongoDB配置文件
在config文件夹下,我们创建default.js文件,这里面主要存放数据库配置信息、sessoin、cookie信息,具体内容如下:
/*
说明:
为什么我们要加入use strict,它的作用是“标记严格模式”,它的好处是:
其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常。
其二:如果在运行期出现了违反严格模式的代码,则抛出执行异常。
*/
'use strict';
module.exports = {
port: 3000,
url:'mongodb://127.0.0.1:27017/elm',
session: {
name: 'SID',
secret: 'SID',
cookie: {
httpOnly: true,
secure: false,
maxAge: 365 * 24 * 60 * 60 * 1000,
}
}
};
创建数据库连接文件
在项目中,我们打开web->mongodb文件夹,在此创建db.js文件,代码如下:
/**
* mongoDB数据库配置
* Created by admin on 2017/8/31 0031.
*/
'use strict';
import mongoose from 'mongoose';
import config from 'config-lite'; //获取基本信息
import log from '../util/log4jsUtil'; //自定义日志文件,后面我们将会说明
mongoose.connect(config.url,{server:{auto_reconnect: true}});
mongoose.Promise = global.Promise;
const db = mongoose.connection;
db.once('open',() => {
console.log('======mongooDB数据库连接成功======');
log.info('mongooDB数据库连接成功.端口号:' + config.port); //自定义日志存储
});
db.on('error',function (error) {
console.error('mongooDB数据库连接错误:' + error);
log.debug('mongooDB数据库连接成功.' + error); //自定义日志存储
mongoose.disconnect();
});
db.on('close',function () {
console.log('mongooDB数据库断开,请重新连接.');
log.trace('mongooDB数据库断开,请重新连接.');
mongoose.connect(config.url, {server:{auto_reconnect:true}});
});
export default db;
创建自定义日志文件
这个日志是我用log4js模块写出来的,里面包含日志的5种特性(debug、error、trace、warn、fatal),首先我们在web->util文件夹下创建log4jsUtil.js文件,具体代码如下:
/**
* Created by admin on 2017/8/31 0031.
* 系统日志
*/
var log4js = require('log4js');
log4js.loadAppender('file');
/**
* 获取日期
*/
var getDateTime = function() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
return year + '-' + month + '-' + day;
};
log4js.addAppender(log4js.appenders.file('logs/' + getDateTime() + '.log'),'user'); //根据日期保存日志信息
var logger = log4js.getLogger('user');
/**
* 正常日志记录
* @param message 日志内容
*/
exports.info = function(message){
logger.info(message);
};
/**
* 调试日志记录
* @param message 日志内容
*/
exports.debug = function(message){
logger.debug(message);
};
/**
*
* @param message 日志内容
*/
exports.trace = function(message){
logger.trace(message);
};
/**
* 告警日志记录
* @param message 日志内容
*/
exports.warn = function(message){
logger.warn(message);
};
/**
* 错误日志记录
* @param message 日志内容
*/
exports.error = function(message){
logger.error(message);
};
/**
*
* @param message
*/
exports.fatal = function(message){
logger.fatal(message);
};
如何编写app.js文件
下面我们将进入项目的核心文件---app.js,那么这里的内容应该怎么写呢,通过代码,我一步一步的讲解:
//导入相关模块,模块在第一节里有所介绍,这里就不多说了
import express from 'express';
import db from './web/mongodb/db.js'
import config from 'config-lite';
import cookieParser from 'cookie-parser';
import session from 'express-session';
import connectMongo from 'connect-mongo'; //该模块用于将session存入mongo中
import winston from 'winston'; //日志
import expressWinston from 'express-winston'; //日志中间插件
import path from 'path';
import history from 'connect-history-api-fallback'; //就是让你的单页面路由处理更自然(比如vue-router的mode设置为html5时)参考地址:https://github.com/bripkens/connect-history-api-fallback
import Statistic from './web/middlewares/statistic';
import router from './routes/index';
const app = express();
app.all('*',(req, res, next) => {
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
res.header('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS');
res.header('Access-Control-Allow-Credentials',true); //可以带Cookies
res.header('X-Powered-By','3.2.1');
if(req.method == 'OPTIONS') {
res.send(200);
} else {
next();
}
});
app.use(Statistic.apiRecord);
const MongoStore = connectMongo(session);
app.use(cookieParser()); //cookie运用
//session运用
app.use(session({
name: config.session.name,
secret: config.session.secret,
resave: true,
saveUninitialized: false,
cookie: config.session.cookie,
store: new MongoStore({url: config.url})
}));
//正确日志
app.use(expressWinston.logger({
transports: [
new (winston.transports.Console)({
json: true,
colorize: true
}),
new winston.transports.File({
filename: 'logs/' + (new Date().getFullYear()) + '-' + (new Date().getMonth() + 1) + '-' + (new Date().getDate()) + '-success.log' ////根据日前生成日志成功文件
})
]
}));
router(app);
//错误日志
app.use(expressWinston.errorLogger({
transports: [
new winston.transports.Console ({
json: true,
colorize: true
}),
new winston.transports.File({
filename: 'logs/' + (new Date().getFullYear()) + '-' + (new Date().getMonth() + 1) + '-' + (new Date().getDate()) + '-error.log' //根据日前生成日志错误文件
})
]
}));
app.use(history());
app.use(express.static('./public'));
app.use((err, req, res, next) => {
res.status(404).send('未找到当前路由');
});
app.listen(config.port); //监听端口
通过以上步骤,我们打开命令框,输入npm run dev,项目正式启动,显示的内容为“MongoDB数据库连接成功”
相关章节
nodeJS开发一套完整的项目(1、基础配置)
nodeJS开发一套完整的项目(2、相关模块介绍)
nodeJS开发一套完整的项目(4、编写底层功能模块)
为了更好的服务大家,请加入我们的技术交流群:(511387930),同时您也可以扫描下方的二维码关注我们的公众号,每天我们都会分享经验,谢谢大家。