Это один простой API с использованием Express, где результаты хранятся в массиве курса.Логика проверки сохраняется в функции validateCourse.
Теперь проблема в том, что конечная точка POST
работает правильно, но пока я пытаюсь выполнить обновление через конечную точку PUT
, получаю 404 ошибка:
name is required
.
Может кто-нибудь сказать мне, где проблема в логике или конечной точке PUT, таким образом, опция обновления не работает.
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.post('/api/courses', (req, res) => {
const result = validateCourse(req.body);
// console.log(result);
if (result.error) {
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);
});
app.put('/api/courses/:id', (req, res) => {
//Search course by get method
//If not found return error 404
const course = courses.find(c => c.id === parseInt(req.params.id));
if (!course) res.status(404).send('not found with the given id');
//validate
//if invalid ,return 400 bad request
const result = validateCourse(req.body);
// const {error} = validateCourse(req.body);
if (result) {
res.status(400).send(result.error.details[0].message);
console.log(result.error.details);
return;
}
//if valid then update course
//Return the updated course to client
course.name = req.body.name;
res.send(course);
});
//INPUT VALIDATION//
function validateCourse(course) {
const schema = {
name: Joi.string().min(3).required()
};
return Joi.validate(course, schema);
}