Здесь есть контроллер, который я до сих порПравильный способ написать эффективную работу 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.
FYI, ваш код имеет пути, которые могут вызывать 'res.end()' более одного раза. Вы этого не хотите. – jfriend00