nodeJS开发一套完整的项目(3、数据库链接和项目启动)

由于我们使用的是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,
        }
    }
};
nodeJS开发一套完整的项目(3、数据库链接和项目启动)_第1张图片
目录图

创建数据库连接文件

在项目中,我们打开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;
nodeJS开发一套完整的项目(3、数据库链接和项目启动)_第2张图片
数据库连接文件截图

创建自定义日志文件

这个日志是我用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);
};
nodeJS开发一套完整的项目(3、数据库链接和项目启动)_第3张图片
日志信息

如何编写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开发一套完整的项目(3、数据库链接和项目启动)_第4张图片
截图

相关章节

nodeJS开发一套完整的项目(1、基础配置)
nodeJS开发一套完整的项目(2、相关模块介绍)
nodeJS开发一套完整的项目(4、编写底层功能模块)
为了更好的服务大家,请加入我们的技术交流群:(511387930),同时您也可以扫描下方的二维码关注我们的公众号,每天我们都会分享经验,谢谢大家。

nodeJS开发一套完整的项目(3、数据库链接和项目启动)_第5张图片

你可能感兴趣的:(nodeJS开发一套完整的项目(3、数据库链接和项目启动))