首页 > 解决方案 > 错误:Route.get() 需要回调函数,但得到了 [object Undefined]

问题描述

我正在尝试使用 Express 作为我的后端创建一个食谱搜索应用程序,并且当我启动我的服务器时,我从我的路由器文件中收到标题中的错误消息。在我的路由器遵循与此处相同的项目之前,我已经制作了项目,但由于某种原因,我不断收到错误,我不知道为什么。下面我将代码粘贴到我的控制器、助手和路由文件中:

控制器:

// import model and users controller
const Recipe = require('../models/recipe');
const usersController = require('../controllers/users-controller');

// initiate controller object
const recipesController = {}

// send API data
recipesController.sendApiRecipe = (req, res) => {
    res.json({
        message: `recipe returned`,
        recipe: res.locals.recipe,
    })
}

// show all favorited recipes
recipesController.index = (req, res, next) => {
    Recipe.findByUser(req.user.id)
    .then(recipe => {
        res.json({
            message: 'rendering favorites',
            data: { recipe },
        })
    }).catch(next)
}

// create favorite recipe
recipesController.create = (req, res) => {
    console.log(req.body, 'from create/recipesController')
    Recipe.create({
        title: req.body.title,
        diet: req.body.diet,
        calories: req.body.calories,
        servings: req.body.servings,
        health: req.body.health,
        ingredient: req.body.ingredient,
        img: req.body.img,
        link: req.body.link,        
        user_id: req.user.id,
    }).then(recipe => {
        res.json({
            message: 'successfully added',
            data: { recipe }
        })
    }).catch(err => {
        console.log(err)
        res.status(500).json({error: err})
    })
}

// delete favorite recipe
recipesController.delete = (req, res, next) => {
    Recipe.destroy(req.params.id)
    .then(() => {
        res.json({
            message: 'successfully deleted recipe',
        })
    }).catch(next)
}

export default recipesController;

帮手:

// import dependencies
require('isomorphic-fetch')
require('dotenv').config()

function getRecipes(req, res, next) {
    // fetch URL
    fetch(`https://api.edamam.com/search?q=${req.params.search}&app_id=${process.env.APP_ID}&app_key=${process.env.APP_KEY}&from=0&to=30`)
    .then(res => res.json())
    // use res.locals to attach data to repsonse object
    .then(fetchRes => {
        // set fetched results to res.locals
        res.locals.recipe = fetchRes
        next()
    })
}

// export function
module.exports = {
    getRecipes: getRecipes,
}

路线:

// import dependencies
const express = require('express')
const recipeHelpers = require('../services/recipes/recipe-helpers')
const recipesController = require('../controllers/recipes-controller')

const recipesRouter = express.Router()

recipesRouter.get('/:search', recipeHelpers.getRecipes, recipesController.sendApiRecipe)
recipesRouter.post('/create', recipesController.create)

module.exports = recipesRouter;

如果我应该提供任何其他信息,请告诉我,我一定会跟进我在进一步排除故障时遇到的任何发现。提前感谢您的帮助!

标签: node.jsexpress

解决方案


我刚刚意识到我没有正确导出我的控制器,并解决了这个问题。谢谢!


推荐阅读