关于node的代码风格
发布于 10 年前 作者 louis-sherren 4436 次浏览 最后一次编辑是 8 年前 来自 问答

刚开始写node,感觉写出来的代码太丑了,可读性也不强。下面这段代码是一个简单的注册逻辑,用了Promise,希望大神拍砖,给一些风格或者是写法上的建议:

    register: function(req, res) {
            var sha1 = require('crypto').createHash('sha1');
            var email = req.body.email;
            var password = sha1.update(req.body.password).digest('hex');
            var connect = mysql.connect(__dirname + '/../mysql.json', 'dbname');

            var sql = 'into user(email, password) value (?, ?)';
            emailAlreadExists(email).then(function() {
                addUser(email, password)
                    .then(function(id) {
                        res.send(res.send(lib.genAjaxRet(0, 'success', {id: id})));
                    }); 
            }, function() {
                res.send(lib.genAjaxRet(10001, lib.s('EMAIL_EXISTS')))
            }); 
        }
14 回复
register: (req, res) ->
  sha1 = require('crypto').createHash('sha1')
  email = req.body.email
  password = sha1.update(req.body.password).digest('hex')
  connect = mysql.connect(__dirname + '/../mysql.json', 'dbname')
  sql = 'into user(email, password) value (?, ?)'
  emailAlreadExists(email).then ->
    addUser(email, password).then (id) ->
      res.send res.send(lib.genAjaxRet(0, 'success', id: id))
  ->
    res.send lib.genAjaxRet(10001, lib.s('EMAIL_EXISTS'))

请上 Coffee 贼船

@jysperm 这个又是 -> 又是 “.” 的, 感觉整个人都混乱了

可参考 airbnb JavaScript 编码风格

@jysperm 也不见得好到那去啊~

var crypto = require('crypto');
var mysql = require('mysql');
var connect = mysql.connect(__dirname + '/../mysql.json', 'dbname');

function secret(password) {
    var sha1 = crypto.createHash('sha1');
    var spassword = sha1.update(password).digest('hex');
    return spassword;
}

function register(req, res) {
    var email = req.body.email;
    var password = secret(req.body.password);
    var sql = 'into user(email, password) value (?, ?)';

    function add() {
        addUser(email, password).then(function(id) {
            res.send(res.send(lib.genAjaxRet(0, 'success', {id: id})));
        }); 
    }

    function exists() {
        res.send(lib.genAjaxRet(10001, lib.s('EMAIL_EXISTS')));
    }

    emailAlreadExists(email).then(add, exists);
}

@louis-sherren 还是用Koa + co吧,写异步代码简单到和写PHP代码差不多了

@tulayang 嗯,把回调专门拿出来确实清爽得多

@andyhu 得看看文章,还不太了解, 发现这篇还不错的样子http://purplebamboo.github.io/2014/05/24/koa-source-analytics-1/

避免使用回调,用yield吧。 团队协作的代码规范见这里:http://www.amoa400.com/team-collaboration-standard/

@amoa400 嗯,正如@andyhu 所说的

@andyhu 我现在的网站已经用 express 搭建得差不多了,请教下直接用express + co有什么不好的地方呢?

@louis-sherren 也没什么不好,习惯用哪个就用哪个吧。如果习惯了koa,会觉得koa更方便和简洁灵活一些。不过差不了太多。koa的缺点是内核完全不带任何middleware,所有功能基本都要靠其他middleware模块来完成。目前用户贡献模块比较杂,需要逐一对比和试用。

@andyhu 了解了,多谢

回到顶部