Validating without using any package
app.post("/api/courses", (req, res) => {
if (!req.body.name || req.body.name.length < 3) {
res.status(400).send("Name is required and should...");
return;
}
const course = {
id: courses.length + 1,
name: req.body.name,
};
courses.push(course);
res.send(course);
});
To install joi (Input Validation)
npm i joi
First Meth
//samayneha Joi bi ahref awal kbir li2ana btarje3 class.
const Joi = require("joi");
const express = require("express");
const app = express();
app.use(express.json());
const courses = [
{ id: 1, name: "course1" },
{ id: 2, name: "course2" },
{ id: 3, name: "course3" },
];
app.get("/api/courses", (req, res) => {
res.send(courses);
});
app.post("/api/courses", (req, res) => {
const schema = Joi.object({
name: Joi.string().min(3).required(),
});
const r = schema.validate({ name: "new course" });
console.log(r);
if (r.error) {
res.status(400).send(r.error.details[0].message);
return;
}
const course = {
id: courses.length + 1,
name: req.body.name,
};
courses.push(course);
res.send(course);
});
//PORT
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Listening on port ${port}....`);
});
Second Meth
//samayneha Joi bi ahref awal kbir li2ana btarje3 class.
const Joi = require("joi");
const express = require("express");
const app = express();
app.use(express.json());
const courses = [
{ id: 1, name: "course1" },
{ id: 2, name: "course2" },
{ id: 3, name: "course3" },
];
app.get("/api/courses", (req, res) => {
res.send(courses);
});
app.post("/api/courses", (req, res) => {
const schema = {
name: Joi.string().min(3).required(),
};
const result = Joi.validate(req.body, schema);
if (result.error) {
//400 Bad request
res.status(400).send(result.error.details[0].message);
return;
}
const course = {
id: courses.length + 1,
name: req.body.name,
};
courses.push(course);
res.send(course);
});
//PORT
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Listening on port ${port}....`);
});
Result without errors
//console.log(result);
{
error: null,
value: { name: 'new course' },
then: [Function: then],
catch: [Function: catch]
}
Result with errors
//console.log(result);
{
error: Error [ValidationError]: child "name" fails because ["name" is required]
at Object.exports.process (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\joi\lib\errors.js:196:19)
at internals.Object._validateWithOptions (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\joi\lib\types\any\index.js:668:31)
at internals.Object.validate (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\joi\lib\types\any\index.js:702:21)
at C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\index.js:23:20
at Layer.handle [as handle_request] (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\express\lib\router\index.js:284:15
at Function.process_params (C:\Users\10User\Documents\BuildingRESTfulAPIsUsingExpress\express-demo\node_modules\express\lib\router\index.js:346:12) {
isJoi: true,
details: [ [Object] ],
_object: { name: 'new course' },
annotate: [Function (anonymous)]
},
value: { username: 'new course' },
then: [Function: then],
catch: [Function: catch]
}