2016-12-04 1 views
0

Здесь есть контроллер, который я до сих порПравильный способ написать эффективную работу CRUD в expressjs

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) 

Будучи новым для nodejs и red гербовых цветов я предполагаю, что код я написал не самым эффективным. Мне нужна помощь в определении того, в какой части я ошибаюсь и делаю эту блокировку. Также было бы полезно, если вы также можете связать некоторые инструменты, которые я могу использовать для профилирования экспресс-приложения.

Просто заметьте, я просто говорю, если текущий контроллер написан правильно. Не о кеширующей части, которую я знаю, может повысить эффективность моего api.

+0

FYI, ваш код имеет пути, которые могут вызывать 'res.end()' более одного раза. Вы этого не хотите. – jfriend00

ответ

0

Я думаю, что ваш код довольно эффективен. Бьюсь об заклад, потому что ваши тесты Mocha работают против реального HTTP-сервера, красная временная метка - это то, где настраиваются и снижаются затраты на подключение TCP.

Чтобы ускорить процесс, вы можете выставить свой код контроллера и использовать Mocha для прямого тестирования. И вы также можете применить тот же шаблон к вашему программному средству.

Смежные вопросы