server.js
const express = require('express') const dotenv = require('dotenv').config() const port = process.env.PORT ||9999 const goals = require('./routes/goalRoutes') const app = express() app.use('/api/goals', goals) app.listen(port, () => console.log(`Server started on port ${port}`)) goalRoutes.js define una ruta api/goals
const express = require('express') const router = express.Router() const { createGoal, getGoals, updateGoal, deleteGoal, } = require('../controllers/goalController') router.route('/').post(createGoal).get(getGoals) router.route('/:id').put(updateGoal).delete(deleteGoal) module.exports = router goalController.js da funcionalidad a esa ruta
//@desc Create goal //@route POST /api/goals //@access Private const createGoal = (err, req, res, next) => { res.status(200).json({message: "Create goal"}) } //@desc Get goals //@route GET /api/goals //@access Private const getGoals = (err, req, res, next) => { res.status(200).json({message: "Read goals"}) } //@desc Update goal //@route PUT /api/goals:id //@access Private const updateGoal = (err, req, res, next) => { res.status(200).json({message: `Update this goal: ${req.params.id}`}) } //@desc Get goals //@route DELETE /api/goal/:id //@access Private const deleteGoal = (err, req, res, next) => { res.status(200).json({message: `Delete this goal: ${req.params.id}`}) } module.exports = { createGoal, getGoals, updateGoal, deleteGoal, } Creé una ruta (pensada como /api/goals ) y controladores para esa ruta. Luego usé los controladores que se encuentran en goalController.js para manejar las solicitudes GET, PUT, POST y DELETE y las conecté a goalRoutes.js .
Usando Postman para realizar pruebas, solo puedo resolver estas solicitudes con un estado 404.
Mi proceso de pensamiento inicial fue que no importé correctamente las funciones del controlador en goalRoutes.js , pero parece que las exporté como un objeto muy bien y Node no parece tener ningún problema con nada en el tiempo de ejecución.
Solía tener el cuerpo de las funciones de los controladores dentro de las funciones de devolución de llamada de router.get , router.post , router.put y router.delete , pero eso era realmente complicado. Preferiría fuertemente no volver a ese lío.
Estoy en una pérdida. ¿Qué detiene las funciones de devolución de llamada de router.route para usar las funciones del controlador? ¿Por qué Postman recibe 404?
Me disculpo si mi terminología apesta. Soy un principiante total en Javascript.
Ha registrado todos sus controladores como middleware de manejo de errores .
Defina funciones de middleware de manejo de errores de la misma manera que otras funciones de middleware, excepto que las funciones de manejo de errores tienen cuatro argumentos en lugar de tres:
(err, req, res, next)
Eliminar los primeros parámetros de err de cada uno de ellos
const createGoal = (req, res, next) => { res.json({message: "Create goal"}) } const getGoals = (req, res, next) => { res.json({message: "Read goals"}) } const updateGoal = (req, res, next) => { res.json({message: `Update this goal: ${req.params.id}`}) } const deleteGoal = (req, res, next) => { res.json({message: `Delete this goal: ${req.params.id}`}) } FYI, el estado de respuesta predeterminado cuando se usa res.json() es 200.
si usa la importación del módulo nodejs, intente implementar esto en su código, funciona
export default ()=> { const app = Router() RolesRoute(app) auth(app) FlightRoute(app) MaintenanceRoute(app) Books(app) app.use('/user',UserRoute()) app.use('/engineer', EngineerRoute()) app.use('/instructor', InstructorRoute()) return app }Rutas de autenticación
import { Router } from 'express' import {AuthValidator} from "../../../lib/validator"; import AuthController from "../../../controllers/auth.controller"; import {isAdmin, isAuth} from "../../../lib/middleware/auth"; const route = Router(); export default (app)=> { app.use('/auth', route); /** * Sign in */ route.post("/signIn", AuthValidator.signInValidator, AuthController.signIn) }