我的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('測試日志');

        

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM