javascript - 如何让我的代码更清晰

标签 javascript node.js mongodb express

代码用于在 Expressjs 和 mongodb 中处理 POST 请求

router.post('/', function(req, res){
  var data = req.body;
  Tag.find({name: data.name}).limit(1).exec( function(err, result){
    if(err){
    } else {
      if(result.length > 0){ // Already exist a tag with same name
        res.status(400).end('Already exist!');
      } else { // Save the new Tag to database
        var tag = new Tag();
        tag.name = data.name;
        tag.lastModifier = req.user?req.user.username:"system";
        tag.lastModified = Date.now();
        tag.save(function(err){
          if(err){
            res.status(400).json({ 
              message: "insert tag error"
            });
          } else {
            Tag.findOne(tag, function(err, result){
              if(err){          
                res.status(400).json({
                  message: "some error.."
                });
              } else {
                //res.status(400).end('same tag name');
                res.status(201).json({
                  _id: result._id
                });          
              }
            });
          }
        });
      }
    }
  });
});

最后 9 行的楼梯太糟糕了....请教我如何让这个烂摊子更清晰?

最佳答案

您可以使用命名函数代替某些函数表达式:

router.post('/', function(req, res){
  var data = req.body;
  Tag.find({name: data.name}).limit(1).exec( function(err, result){
    if(err){
    } else {
      if(result.length > 0){ // Already exist a tag with same name
        res.status(400).end('Already exist!');
      } else { // Save the new Tag to database
        var tag = new Tag();
        tag.name = data.name;
        tag.lastModifier = req.user?req.user.username:"system";
        tag.lastModified = Date.now();
        tag.save(save(err));
      }
    }
  });
});

function save(err){
  if(err){
    res.status(400).json({ 
      message: "insert tag error"
    });
  } else {
    Tag.findOne(tag, handleResult(err, result));
  }
}

function handleResult(err, result){
  if(err){          
    res.status(400).json({
      message: "some error.."
    });
  } else {
    //res.status(400).end('same tag name');
    res.status(201).json({
      _id: result._id
    });          
  }
}

(你当然可以根据情况给它们起个更合适的名字,但它说明了原理。)

关于javascript - 如何让我的代码更清晰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27202418/

相关文章:

javascript - 将 d3.csv 响应分配给全局变量

javascript - 如何修改此主题标签正则表达式以检查第二个字符是 a-z 还是 A-Z?

javascript - 我可以将 div 及其内容传递到另一个页面吗

javascript - 使用node.js实现简单的代理服务器

node.js - 是否建议在 AWS 上的 Ubuntu 实例上安装 MongoDB?

javascript - 在 Meteor 中插入抓取的内容(通过 Cheerio)时出现问题

javascript - vue.js + Android 键盘 - 模型上缺少最后输入的单词

node.js - 如何使用 grunt 连接 angularjs 文件

node.js - Rest API Node Js & Express,创建指向自身的链接(href)

python - Geojson 到 MongoDB/Mongoengine 的属性格式