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

问题描述

你们是我最后的希望,我花了12个多小时没有解决问题

该应用程序功能齐全,直到我进行了修改并添加了控件

并将露营地路线移动到单独的文件“控制器”以使路由器文件像这样

router.get("/", isLoggedIn, CatchAsync(Campgrounds.index));

router.get("/me", isLoggedIn, CatchAsync(Campgrounds.me));

router.get("/new", isLoggedIn, CatchAsync(Campgrounds.new_camp));

router.post("/new/submit", isLoggedIn, validate, CatchAsync(Campgrounds.submitnew));

router.get("/:id", isLoggedIn, CatchAsync(Campgrounds.show_Camp));

router.get("/:id/edit", isLoggedIn, isAuthenticated, CatchAsync(Campgrounds.edit_Camp));

router.delete("/:id/delete", isLoggedIn, isAuthenticated, CatchAsync(Campgrounds.delete_Camp));

之后应用程序无法运行

Error: Route.get() requires a callback function but got a [object Promise]

这是沙盒上的项目 https://codesandbox.io/s/vigorous-galileo-sdy0w?file=/app.js

标签: node.jsexpressnode-modules

解决方案


Error告诉你一切。我看到了你的沙箱,它显示:

(alias) CatchAsync(fn: any): Promise<(req: any, res: any, next: any) => void>

您的CatchAsync函数返回一个承诺并且 Route.get() 需要回调。

你应该明白这async function意味着什么。

来自文档:

函数前面的“异步”一词意味着一件简单的事情:函数总是返回一个 Promise。其他值自动包装在已解决的承诺中。


推荐阅读