Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nodejs学习之旅(一) #3

Open
xxholly32 opened this issue Apr 21, 2016 · 0 comments
Open

nodejs学习之旅(一) #3

xxholly32 opened this issue Apr 21, 2016 · 0 comments

Comments

@xxholly32
Copy link
Owner

xxholly32 commented Apr 21, 2016

终于开始nodejs的第一个实践项目了,现在到中间一半,我把前半段总结一下,做一个经验教训吧,顺便理一些不足点,我的一些demo都在我个人github里面
https://github.com/xxholly32/startNodejs
包含前期的预研,redis thrift(暂时还没用到) mocha express框架等

之前大牛们的文章,我已阅无数遍的:
http://ued.taobao.org/blog/2014/04/xtpl/
lifesinger/blog#184

我们项目几个简单配置
redis

app.use(cookieParser(settings.cookieSecret));
//默认浏览器失效时间20分钟
app.use(session({
    store: new RedisStore({
        host: settings.redisUrl,
        port: settings.redisPort,
        password : settings.redisAuth,
        db : settings.redisDbindex
    }),
    settings:settings.cookieSecret,
    cookie:{ maxAge : settings.redisSessionLostTime }
}));

之前我想手动去写session共享这块
发现connect-redis帮我做好了,那直接拿来用吧

拦截器

app.use(function (req, res, next) {
    var url = req.originalUrl;
    //是否存在seesion
    if (url.indexOf("/app") == -1 && url != "/" && url != "/login" && !req.session.userName) {
        return res.redirect("/");
    }
    //手机端数据过滤
    if(url.indexOf("/app") > -1){
        var jsonParams = JSON.parse(req.body.jsonParams);
        //if(!tools.appSignTest(jsonParams.system.sign, jsonParams.params)){
        //    return res.send("md5验证错误");
        //}
        req.body = jsonParams;
    }
    next();
});

登陆的拦截器,写的比较low
手机端和web端还分开
后续如果有框架的话
或者采用react的形式去做

通讯:

proxy.ajax = function(jsonPath, data, javaObj) {
    var post_data = data;
    //远程调试模式
    if(settings.nodeConnectType === "net"){
        path = settings.nginxhost + "/" + settings.nodeVersion + javaObj.url;
        if(javaObj.method == "get" && query.encode(post_data, '&', '=').length > 0){
            path += "?" + query.encode(post_data, '&', '=');
        }
        if(javaObj.method !== "get"){
            //数组的话多加一层解析
            for(var item in post_data) {
                if (Array.isArray(post_data[item])) {
                    post_data[item + "[]"] = post_data[item];

                    delete post_data[item]
                }
            }
            post_data = query.encode(post_data);
        }
        return new Promise(function(resolve, reject) {
            //http形式
            request(
                {
                    method: javaObj.method,
                    url : path,
                    form : post_data
                },
                function (error, response, data) {
                    //request.post(path, { form : post_data } , function (error, response, data) {
                    if (!error && response.statusCode == 200) {
                        resolve(JSON.parse(data));
                    }else{
                        try{
                            console.log(JSON.parse(data));
                        }catch(e){
                            console.log(e)
                        }

                        reject(new Error(this.statusText));
                    }
                })
        })
    }else {
        //本地json开发模式
        jsonPath = "./json" + jsonPath + ".json";
        return new Promise(function(resolve, reject) {
            var rf = require("fs");
            rf.readFile(jsonPath,'utf-8',function(err,data){
                if(err){
                    console.log("找不到指定路径文件: " + jsonPath);
                    reject(err);
                }else{
                    resolve(JSON.parse(data));
                }
            });
        })
    }
};

关于通讯的话
暂时用http的形式去做
后期考虑thrift等方式去实现
这里我走了2套
还有一套是给前端的都用json的方式去静态处理
在http处理的时候数组部分做了特殊处理后端只能接收xx[]:"xx",不能接收xx : ["xxx"]

这些都是比较重要的,接下去都是些体力活了
后续还需要考虑的:
性能问题
错误信息统一处理
一些枚举数据获取的问题
正式发布到nginx的配置问题
以及2个nodejs服务的session共享问题

存在一个问题可能就会否定掉整个框架
在框架学习中,还是对整个把控要求很高的,真的是修改了一个框架问题
整个项目都可能会大动

还是学到了很多,特别是新的知识,对我的收益甚是巨大
承担更多的责任能带来更多改变

@xxholly32 xxholly32 changed the title nodejs学习之旅 nodejs学习之旅(一) Apr 21, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant