Skip to content

Commit

Permalink
Merge pull request #15 from nsonanh/feature-fix-server-crashes
Browse files Browse the repository at this point in the history
[feature-fix-server-crashes] Fix server crashes
  • Loading branch information
nsonanh committed Jun 19, 2017
2 parents 62b2387 + 0df4079 commit dc81bfa
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 47 deletions.
2 changes: 1 addition & 1 deletion app/models/danhngon.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ var DanhngonSchema = new Schema({
content: { type: String, required: true },
author: { type: String, required: true },
language: { type: String, required: true },
createdAt: { type: Date, default: Date.now }
createdAt: { type: Date, required: true, default: Date.now }
},
{
collection: 'Danhngon',
Expand Down
File renamed without changes.
41 changes: 41 additions & 0 deletions lib/input-validator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// input-validator.js
// ========

var validateID = function(req, res) {
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");
if (!checkForHexRegExp.test(req.params.danhngon_id)) {
res.status(404) // HTTP status 404: NotFound
.send('Invalid input, please enter valid _id.');
return false;
}
return true;
}

var validateParams = function(req, res) {
if (!req.body.content || !req.body.author || !req.body.language) {
res.status(404) // HTTP status 404: NotFound
.send('Invalid input, please enter params: content, author and original language.');
return false;
}
return true;
}

var validateLangParam = function(req, res) {
var lang = req.params.translatedlanguage;
if (lang !== 'auto') {
var checkForHexRegExp = new RegExp("^[a-zA-Z]{2}$");
if (!checkForHexRegExp.test(lang)) {
res.status(404) // HTTP status 404: NotFound
.send('Invalid input, please enter valid language ISO code.');
return false;
}
}
return true;
}

// declare function for this module
module.exports = {
validateID: validateID,
validateParams: validateParams,
validateLangParam: validateLangParam
};
105 changes: 63 additions & 42 deletions lib/request-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
// ========

// Get required modules
let mongoose = require('mongoose');
let translate = require('./translate');
let Danhngon = require('../app/models/danhngon');
let config = require('config'); //we load the db location from the JSON files
let mongoose = require('mongoose');
let translate = require('./translate');
let Danhngon = require('../app/models/danhngon');
let inputValidator = require('./input-validator');
let config = require('config'); //we load the db location from the JSON files

//db options
let options = {
Expand All @@ -32,36 +33,45 @@ var handlePost = function(req, res) {
}

var handlePut = function(req, res) {
// use our danhngon model to find the danhngon we want
Danhngon.findById(req.params.danhngon_id, function(err, danhngon) {
if (err)
res.send(err);

// save the danhngon
Object.assign(danhngon, req.body).save((err, danhngon) => {
if(err) res.send(err);
res.json({ message: 'danhngon updated!', danhngon });
if (inputValidator.validateID(req, res)) {
// use our danhngon model to find the danhngon we want
Danhngon.findById(req.params.danhngon_id, function(err, danhngon) {
if (err) {
res.send(err);
} else if (!danhngon) {
res.status(404).send("Can't find danhngon by id."); // HTTP status 404: NotFound
} else {
// save the danhngon
Object.assign(danhngon, req.body).save((err, danhngon) => {
if(err) res.send(err);
res.json({ message: 'danhngon updated!', danhngon });
});
}
});
});
}
}

var handleDelete = function(req, res) {
Danhngon.remove({
_id: req.params.danhngon_id
}, function(err, danhngon) {
if (err)
res.send(err);

res.json({ message: 'Danhngon successfully deleted!' });
});
if (inputValidator.validateID(req, res)) {
Danhngon.remove({
_id: req.params.danhngon_id
}, function(err, danhngon) {
if (err) {
res.send(err);
} else {
res.json({ message: 'Danhngon successfully deleted!' });
}
});
}
}

var handleGet = function(req, res) {
Danhngon.find(function(err, danhngon) {
if (err)
if (err) {
res.send(err);

res.json(danhngon);
} else {
res.json(danhngon);
}
});
}

Expand All @@ -73,8 +83,9 @@ var handleGetRandom = function(req, res) {
function (err, danhngon) {
if (err) {
res.send(err);
} else {
res.json(danhngon);
}
res.json(danhngon);
});
});
}
Expand All @@ -88,32 +99,42 @@ var handleGetRandomWithLang = function(req, res) {
res.send(err);
} else if (!lang) {
res.json(danhngon);
} else {
} else if (inputValidator.validateLangParam(req, res)) {
translate.processWithTranslation(danhngon, lang, req, res);
}
});
});
}

var handleGetWithID = function(req, res) {
Danhngon.findById(req.params.danhngon_id, function(err, danhngon) {
if (err)
res.send(err);
res.json(danhngon);
});
if (inputValidator.validateID(req, res)) {
Danhngon.findById(req.params.danhngon_id, function(err, danhngon) {
if (err) {
res.send(err);
} else if (!danhngon) {
res.status(404).send("Can't find danhngon by id."); // HTTP status 404: NotFound
} else {
res.json(danhngon);
}
});
}
}

var handleGetWithIDAndLang = function(req, res) {
var lang = req.params.translatedlanguage;
Danhngon.findById(req.params.danhngon_id).exec(function (err, danhngon) {
if (err) {
res.send(err);
} else if (!lang) {
res.json(danhngon);
} else {
translate.processWithTranslation(danhngon, lang, req, res);
}
});
if (inputValidator.validateID(req, res)) {
var lang = req.params.translatedlanguage;
Danhngon.findById(req.params.danhngon_id).exec(function (err, danhngon) {
if (err) {
res.send(err);
} else if (!danhngon) {
res.status(404).send("Can't find danhngon by id."); // HTTP status 404: NotFound
} else if (!lang) {
res.json(danhngon);
} else if (inputValidator.validateLangParam(req, res)) {
translate.processWithTranslation(danhngon, lang, req, res);
}
});
}
}

module.exports = {
Expand Down
7 changes: 4 additions & 3 deletions lib/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ var sendTranslation = function (danhngon, lang, req, res) {
// get translation
googleTranslate.translate(danhngon.content, danhngon.language, lang, function(err, translation) {
if (err) {
res.send(err)
res.status(err.response.statusCode).send(err.body);
} else {
danhngon.content = translation.translatedText;
res.json(danhngon);
}
danhngon.content = translation.translatedText;
res.json(danhngon);
});
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@
},
"scripts": {
"start": "set NODE_ENV=dev && node server.js",
"test": "mocha ./app/test/danhngon.js --reporter spec"
"test": "mocha ./app/test/test.js --reporter spec"
}
}

0 comments on commit dc81bfa

Please sign in to comment.