Next.js - TypeError fn 不是函数

问题描述

在我的 routes/index.js 文件中:

const express = require("express");

const authController = require("../controllers/authController");


const router = express.Router();

console.log('ROUTES index.js')


/* Error handler for async / await functions */
const catchErrors = fn => {
    return function(req,res,next) {
        return fn(req,next).catch(next);
    };
};

/**
 *  AUTH ROUTES: /api/auth
 */
router.post(
    "/api/auth/signup",authController.validateSignup,catchErrors(authController.signup)
);

module.exports = router;

然后在 authController.js 里面:

const { body,check,sanitizeBody,validationResult } = require('express-validator');




exports.validateSignup = async (req,next) => {
    console.log('validateSignup')

    await check("name").notEmpty().withMessage("Enter a Name")
                .isLength({ min: 4,max: 10 }).withMessage("Name must be between 4 and 10 characters").run(req);


    const result = validationResult(req);


    if (!result.isEmpty()) {
      console.log('inside if of validateSignup')
      return res.status(400).json({ errors: result.array() });
    }

    console.log('before next')
    next();
  };
  

然后我使用 axios 发布到指定的路由:

const { data } = await axios.post("/api/auth/signup",user);

使用上面的行,如果我输入正确的输入,我不会收到任何错误,因此不会调用 if 语句中的 console.log...但我得到以下输出错误

validateSignup
before next
TypeError: fn is not a function
    at /Users/bliss/Documents/Coder/NextJS/NextManilaBNB/server/routes/index.js:14:16
    at Layer.handle [as handle_request] (/Users/bliss/Documents/Coder/NextJS/NextManilaBNB/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/bliss/Documents/Coder/NextJS/NextManilaBNB/node_modules/express/lib/router/route.js:137:13)
    at exports.validateSignup (/Users/bliss/Documents/Coder/NextJS/NextManilaBNB/server/controllers/authController.js:23:5)
    at runMicrotasks (<anonymous>)
    at processticksAndRejections (internal/process/task_queues.js:93:5)

如您所见,错误似乎在调用 next()

后发生

如何解决这个问题? 这是什么原因造成的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)