如何解决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)
后发生
如何解决这个问题? 这是什么原因造成的?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。