我的Node.js处女作

前言

         很高兴我的node.js处女作开发完成了,目前还在优化完善阶段,经历两周的紧张沟通和开发,工作总算搞一段落。选用node.js 一是因为这次的业务逻辑相对来说简单想拿node练练手,二就是相对来说在处理高并发时比较有简单粗暴的优势,官方自己的话说处理百万级并发都很easy,这也是我跟解决方案经理吹牛的理由。

开发完几个问题

       1、因为做项目的惯性,在连接数据库时就想分层,Dao或者Repository。那么在这次的node项目中我没有分层,因为连接是在app.js中打开并且通过中间件注入Express Request中,我不知道以什么方式把连接传入Dao层,当然也不太明确Dao层如何组织,也不太明确如何在路由.js文件中如何更好的调用Dao层。

       2、如果生产部署的话肯定是需要绑定域名的,那么目前最简单的绑定方式和部署方式是什么?(已了解到使用nginx来部署,但还没实践,同时也可以处理并发负载)。

用到的技术和知识点

        1、Express框架(4.x)。没什么可说的MVC框架,node.js官方推荐的框架,最起码你用reqeust,response顺手很多。

        2、node.js连接Mysql。 在连接mysql时我用了一个插件express-myconnection,并且注册成中间件可以在每次请求的request那到connection,上一篇文章中总结过, 但随即我在评论中看到有人持反对态度,并且点了反对,他的理由是你做成中间件,那么每个路由请求中都会连接数据库。 随后我又查了官网和其他的一些资料,他们推荐是这样做的,并且解释到这样使用每个connection的生命周期也就是到response结束连接就会释放掉。

        

//app.js 

app.use(
    connection(mysql, {
        host: '127.0.0.1',
        user: 'root',
        password: '*****',
        port: '3306',
        database: 'db'
    }, 'pool') //选择资源池,系统自己release connection to poll
);


//routes/order.js
router.get('/cost', function(req, res, next) {
     req.getConnection(function(err, conn) {
          //处理你的数据逻辑
     });
});

           3、node.js 连接redis。连接redis直接使用createClient,使用不使用pool都可以。

var redis = require('redis'),
      client = redis.createClient();

//选择数据库
client.select('0',function(err){})

//判断key是否存在
client.exists(key, function(err, result) {})

//设置hash set值
client.hmset(key,[],function(err,result){})

//获取hash set值
client.hgetall(key, function(err, obj) {})

//获取key value值
client.get(key, function(err, result) {});

//设置key value
client.set(key, opValue, function(err, result) {})

         4、使用log4js。当然生产运行的接口程序少不了日志的运行。log4js还能配置发送邮件,但我没调通,仅仅是报错时看下log。

//做成json配置文件

{
    "appenders": [
        { "type": "console", "category": "console" }, {
            "type": "dateFile",
            "filename": "d:/weblogs/logs/",
            "pattern": "yyyyMMddhh.txt",
            "absolute": true,
            "alwaysIncludePattern": true,
            "category": "logInfo"
        }
    ],
    "levels": { "logInfo": "DEBUG" }
}

//调用
var log4js = require('log4js');
log4js.configure('./log4js.json');
var logger = log4js.getLogger('logInfo');

//错误日志
logger.err('测试日志');

//info日志
logger.info('测试日志');

        

 

原文地址:https://www.cnblogs.com/sword-successful/p/5259131.html