设为首页 收藏本站
查看: 379|回复: 0

[经验分享] NodeJS Version Upgrade 5.1.0 and Error Handling

[复制链接]

尚未签到

发表于 2017-2-22 07:59:35 | 显示全部楼层 |阅读模式
NodeJS Version Upgrade 5.1.0 and Error Handling

1 Version Upgrade
4.2.2 on Local Mac OS
https://nodejs.org/dist/v4.2.2/

I like to build all these things on my own server. Download the source version.
> wget https://nodejs.org/dist/v4.2.2/node-v4.2.2.tar.gz

> ./configure --prefix=/Users/carl/tool/node-v4.2.2

Make and make install there. Add it to the class path.

5.1.0 on Local Mac OS
https://nodejs.org/dist/v5.1.0/

> wget https://nodejs.org/dist/v5.1.0/node-v5.1.0.tar.gz

> ./configure --prefix=/Users/carl/tool/node-v5.1.0

Do the same thing as 4.2.2.
> node --version && npm --version
v5.1.0
3.3.12

5.1.0 on CentOS/Linux
Prepare the build env
> sudo yum groupinstall "Development Tools"

Same thing as on MAC

Add things to the path as follow:
>vi ~/.bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin

JAVA_HOME=/opt/jdk1.8.0_60
export JAVA_HOME

JRE_HOME=/opt/jdk1.8.0_60/jre
export JRE_HOME

PATH=$PATH:/opt/jdk1.8.0_60/bin:/opt/jdk1.8.0_60/jre/bin
PATH=$PATH:/opt/sbt/bin
PATH=$PATH:/opt/node/bin

export PATH

Done
> node --version && npm --version
v5.1.0
3.3.12

5.1.0 on Ubuntu System
Same as on MAC OS

5.1.0 on RaspberryPi
Currently version is as follow:
> node --version && npm --version
v0.12.7
2.11.3

Check OS version
> uname -a
Linux raspberrypi1 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux

> uname -a
Linux raspberrypi2 4.1.7-v7+ #817 SMP PREEMPT Sat Sep 19 15:32:00 BST 2015 armv7l GNU/Linux

Oh, my different raspberryPis are different.
On ARMV61
> wget https://nodejs.org/dist/v5.1.0/node-v5.1.0-linux-armv6l.tar.gz

Put it in the working directory
> mv node-v5.1.0-linux-armv6l ~/tool/node-v5.1.0

> sudo ln -s /home/carl/tool/node-v5.1.0 /opt/node-v5.1.0

> sudo ln -s /opt/node-v5.1.0 /opt/node

Add that node to the path, then check the version
> node --version && npm --version
v5.1.0
3.3.12

On ARMV71
> wget https://nodejs.org/dist/v5.1.0/node-v5.1.0-linux-armv7l.tar.gz

Same thing as On ARMV61
> node --version && npm --version
v5.1.0
3.3.12

2 Error Handling

For example:
/*jslint node: true */
'use strict';

var ContextIO = require('contextio');
var HashMap = require('hashmap').HashMap;
var _ = require('../underscore');

var services = null;
var cxtioClient = null;
var jobsFilter = null;
var resumesFilter = null;

module.exports = {
    init: init,
    fetchEmailsWithFilter: fetchEmailsWithFilter,
    fetchAttachmentLink: fetchAttachmentLink,
    fetchMailContent: fetchMailContent,
    fetchResumesByAccountCode: fetchResumesByAccountCode,
    fetchJobsByAccountCode: fetchJobsByAccountCode,
    fetchAccountInfoByEmail: fetchAccountInfoByEmail
};

function init(myServices) {
    services = myServices;

    var logger = services.get('logger');
    var config = services.get('config');

    logger.info("EmailScan - initConnection ---------------");
    logger.info(config.data.contextio);

    cxtioClient = new ContextIO.Client(config.data.contextio.version, config.data.contextio.endpoint, config.data.contextio.security);
    jobsFilter = config.data.contextio.jobsFilter;
    resumesFilter = config.data.contextio.resumesFilter;
    //todo: log this twice?
    logger.info("EmailScan - initConnection ---------------");
}

function fetchEmailsWithFilter(accountCode, filter, callback) {
    var logger = services.get('logger');

    logger.trace("EmailScan - fetchEmailsWithFilter - accountCode = " + accountCode);
    logger.trace("EmailScan - fetchEmailsWithFilter - filter = " + JSON.stringify(filter));

    cxtioClient
        .accounts(accountCode)
        .messages()
        .get(filter, function (err, data) {
            if (err) {
                logger.error("EmailScan - fetchEmailsWithFilter - fail to fetch the messages.");
                callback(err, []);
                return;
            }

            if (!data) {
                var warning_message = "EmailScan - fetchEmailsWithFilter - fail to fetch any messages with filter = " + JSON.stringify(filter);
                logger.warn(warning_message);
                callback(null, []);
            }

            if (data.statusCode !== 200) {
                handleNotOk(data, logger, callback);
                return;
            }

            var msgBody = data.body;
            logger.trace("EmailScan - fetchEmailsWithFilter - get the messages info with filter = " + JSON.stringify(filter));
            logger.trace("EmailScan - fetchEmailsWithFilter - get response info = " + JSON.stringify(data));
            logger.trace("EmailScan - fetchEmailsWithFilter - get message body = " + JSON.stringify(msgBody));

            if (msgBody.length < 1) {
                var warning_msg = "EmailScan - fetchEmailsWithFilter - fail to fetch any messages with filter = " + JSON.stringify(filter);
                logger.warn(warning_msg);
                callback(null, []);
                return;
            }

            callback(null, msgBody);
        });
}

function handleNotOk (data, logger, callback) {
    //error handle, handle the error
    logger.error("Unsuccessful response handle " + JSON.stringify(data));
    var statusCode = 500;
    if (data.statusCode !== undefined) {
        statusCode = data.statusCode;
    }
    var err_obj = {"statusCode": statusCode, "message": data.body};
    callback(err_obj, null);
}

I like the idea that my colleague change the exports part. Error Handling on the express.io controller
/*jslint node: true */
'use strict';

var HashMap = require('hashmap').HashMap;

var    services = null;

module.exports = {

    getAccountByEmail : function(req, res) {
        //services
        var emailscan = services.get('emailscan');
        var logger = services.get('logger');

        //params
        var email = req.params.email;

        emailscan.fetchAccountInfoByEmail(email, function(err, account){
            if(err){
                res.status(err.statusCode).json(err.message);
                return ;
            }

            if(account === undefined || account === null){
                res.status(404).json({ "type":"error", "value":"The email[" + email + "] is not valid!"});
                return ;
            }

            logger.debug("account info = " + account.id);
            res.json(account);
            return ;
        });
    },

    init : function(myservices){
        services = myservices;
    }

};

References:
http://sillycat.iteye.com/blog/2256088

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345402-1-1.html 上篇帖子: nodejs和java中的des/3des加密解密 下篇帖子: nodejs编译mongodb bson模块出现MSB4025错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表