• 我的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('测试日志');

            

     

  • 相关阅读:
    lua 根据路径获取文件名
    python中的re模块
    正则表达式中的开头和结尾
    正则表达式匹配多个字符
    正则表达式中匹配单个字符
    正则表达式的作用
    gevent实现协程
    greenlet实现协程
    生成器的使用注意
    生成器实现斐波那契数列
  • 原文地址:https://www.cnblogs.com/sword-successful/p/5259131.html
Copyright © 2020-2023  润新知