美文网首页Web 前端开发
nodeJS开发一套完整的项目(3、数据库链接和项目启动)

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

作者: 陈楠酒肆 | 来源:发表于2017-09-23 11:04 被阅读2195次

    由于我们使用的是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),同时您也可以扫描下方的二维码关注我们的公众号,每天我们都会分享经验,谢谢大家。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ntxcextx.html