在expressjs中编写高效CRUD操作的正确方法

时间:2016-12-04 21:43:37

标签: node.js express mocha

这是我到目前为止的控制器

router.get('/:scribbleId',function(req,res,next) {
  scribble.findOne({_id:req.params.scribbleId},function(err,object) {
    if(err)
      res.status(500).end();
    if(object == null)
      res.status(404).end();
    else {
      if(object.owner == req.user) {
        res.status(200).json(object);
      }else if(object.is_public == true) {
        res.status(200).json(object);
      }else {
        res.status(403).end();
      }
    }
  });
});

并且在middleware

之前有一个Router
var user   = require('../models/User.js');
var jwt    = require('jsonwebtoken');
var config = require('../settings');

module.exports = function (req,res,next) {
  var token = req.get("authorization");
  if (!token) {
    res.set("WWW-Authenticate", "Basic realm=\"Authorization Required\"");
    res.status(403).send("Authorization Required");
  }else {
    jwt.verify(token,config.secret,function(err,decoded) {
      if(err) {
        res.set("WWW-Authenticate", "Basic realm=\"Authorization Required\"");
        res.status(403).send("Authorization Required");
      }else {
        userId = decoded.id;
        req.user = userId;
        next();
      }
    });
  }
};

mocha测试在操作中花费大量时间的问题。以下是一些案例

Tests for GET verb
  ✓ Root endpoint returns 403 without token
  ✓ Root endpoint should return 200 with valid token (94ms)
  ✓ Return proper json object if owner (109ms)
  ✓ Return proper json object if public (88ms)
  ✓ Return 404 if scribble not found (91ms)

作为nodejsred颜色标记的新手,我假设我写的代码不是最有效的代码。我需要帮助的是确定我哪个部分出错并进行阻止。如果您还可以链接一些我可以用来描述快速应用程序的工具,也将不胜感激。

  

请注意,我只是在谈论当前控制器是否正确写入。不是关于我知道的缓存部分可以提高我的api的效率。

1 个答案:

答案 0 :(得分:0)

我认为您的代码非常有效。我敢打赌,因为您的Mocha测试是针对真实的HTTP服务器运行的,红色时间戳是设置和拆除TCP连接成本的地方。

为了加快速度,您可以公开控制器代码并使用Mocha直接测试它。您可能还希望将相同的模式应用于中间件代码。