Same I18n validation on server and client for web applications.
- Validate inputs in HTML form.
- Fetch response to server optionally by ajax.
Suitable for web apps with a great variety of forms.
Show instructions
-
Install by npm:
$ npm install validate-box
Start http server for validate request examples from client.
const fs = require("fs"); //file system
const url = require("url"); //url parser
const http = require("http"); //http server
const qs = require("querystring"); //parse post data
const valid = require("validate-box"); //validator
const _maxFieldsSize= 20 * 1024 * 1024; //20mb
//create server instance
const server = http.createServer(function(req, res) {
let parts = url.parse(req.url.toLowerCase(), true); //parse url
let pathname = parts.pathname; //https://example.org/abc/xyz?123 = /abc/xyz
//Static request => res.end()
if (pathname.indexOf("/favicon.ico") > -1)
return res.end(); //ignore icon request
if ((pathname.indexOf("/css/") > -1) || (pathname.indexOf("/js/") > -1))
return res.end(fs.readFileSync(__dirname + pathname).toString());
valid.setI18n(parts.query.lang);
if (req.method == "POST") { //post request
let rawData = ""; //buffer
req.on("data", function(chunk) {
rawData += chunk;
if (rawData.length > _maxFieldsSize) { //20mb
delete rawData; //free body memory
req.connection.destroy(); //FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
}
});
req.on("end", function() {
req.body = (req.headers["content-type"] == "application/json") ? JSON.parse(rawData) : qs.parse(rawData);
console.log("----------", "Validating", "----------");
console.log(req.body);
let error = {}; //err container
let fields = req.body; //request fields
error.name = valid.vb.size(fields.name, 1, 200) || "Field name ame tot valid";
error.subject = valid.vb.size(fields.subject, 0, 200) || "Field subject not valid";
error.email = (fields.email && valid.vb.email(fields.email)) || "Invalid email format";
error.idUsuario = fields.idUsuario || "User is required";
error.id = error.idUsuario ? valid.nb.toFloat(fields.idUsuario) : 0;
if (error.id <= 0)
error.idUsuario = "User not found";
res.end(JSON.stringify(error), "application/json", () => {
console.log("----------", "Results", "----------");
console.log("Error:", error);
});
});
}
else //get request
res.end(fs.readFileSync("src/views/index.html"), "text/html", () => {
console.log(req.url, "->", "src/views/index.html");
});
});
Lunch jest testing
$ npm test