Когда я написал сообщение и получил функцию в authorRouter. js файл, api работали, но когда я переместил эти функции в authorController. js файл в папке контроллеров, api перестали работать. Когда я вызываю api от почтальона, это приводит к бесконечному запросу. Ранее я вызывал функцию контроллера из файла маршрутизатора следующим образом:
.post(controller.post)
.get(controller.get)
, но это выдавало мне ошибку «Route.get () требует функции обратного вызова, но получил [объект Undefined]», поэтому я отредактировал мой файл маршрутизатора, как показано ниже:
authorRouter. js файл
const express = require('express');
const authorController = require('../controllers/authorController');
function routes(Author){
const authorRouter = express.Router();
const controller = authorController(Author);
authorRouter.route('/author')
.post( function(req, res){
controller.post
})
.get( function(req,res){
controller.get
}
);
// .post((req,res)=>{
// const author = new Author(req.body);
// author.save();
// return res.status(201).json(author);
// })
// .get((req,res)=>{
// const query = {};
// if(req.query.name){
// query.name = req.query.name;
// }
// Author.find(query,(err,authors)=>{
// if(err){
// return res.send(err);
// }
// return res.json(authors);
// });
// });
authorRouter.use('/author/:authorId',(req,res,next)=>{
Author.findById(req.params.authorId,(err,author)=>{
if(err){
return res.send(err);
}
if(author){
req.author =author;
return next();
}
return res.sendStatus(404);
});
});
authorRouter.route('/author/:authorId')
.get((req,res)=>{
res.json(req.author);
})
.put((req,res)=>{
const {author} =req;
author.name = req.body.name;
author.book = req.body.book;
author.age = req.body.age;
req.author.save((err)=>{
if(err){
return res.send(err);
}
return res.json(author);
})
})
.patch((req,res)=>{
const { author} =req;
if (req.body._id){
delete req.body._id;
}
Object.entries(req.body).forEach(item=>{
const key = item[0];
const value = item[1];
author[key]= value;
});
req.author.save((err)=>{
if(err){
return res.send(err);
}
return res.json(author);
});
})
.delete((req,res)=>{
req.authorId.remove((err)=>{
if(err){
return res.send(err);
}
return res.sendStatus(204);
})
});
return authorRouter;
}
module.exports= routes;
authorController. js файл
function authorController(Author){
function post(req,res){
const author = new Author(req.body);
author.save();
return res.status(201).json(author);
}
function get(req,res) {
const query = {};
if(req.query.name){
query.name = req.query.name;
}
Author.find(query,(err,authors)=>{
if(err){
return res.send(err);
}
return res.json(authors);
});
}
return(post, get );
}
module.exports = authorController;
Почему это происходит?