问题描述
错误下方的auth.js中的
Route.post()需要回调函数,但是得到了[object Undefined]
auth.js路由
const express = require('express');
const { commonValidation } = require('../validation/commonValidation');
const { validation } = require('../middleware/validation');
const {
register,} = require('../controllers/auth');
const router = express.Router();
//============ WANT TO RESUSE register validator for profile
router.post('/register',[commonValidation('register'),validation],register);
module.exports = router;
auth.js控制器
const ErrorResponse = require('../utils/errorResponse');
const asyncHandler = require('../middleware/async');
const User = require('../models/User');
exports.register = asyncHandler(async (req,res,next) => {
const { email,password } = req.body;
let user = await User.findOne({ email });
if (user) {
return next(new ErrorResponse('Email already exists',500));
}
user = new User({
email,password,});
await user.save();
sendTokenResponse(user,200,res);
});
commonValidation
const { check } = require('express-validator');
exports.commonValidation = (method) => {
switch (method) {
case 'userUpdate':
case 'register': {
return [
check('email','Please include a valid
email').isEmail().trim().escape(),check(
'password',`Please enter a password with 6 or more
characters`
).isLength({ min: constants.passwordLength }).trim().escape(),]
}
}
}
validation.js
const { validationResult } = require('express-validator');
const asyncHandler = require('./async');
exports.exports = asyncHandler(async (req,next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const extractedErrors = []
errors.array({ onlyFirstError: true }).map(err =>
extractedErrors.push({ [err.param]: err.msg }));
}
return next(new ErrorResponse(extractedErrors,401));
});
asyncHandler
const asyncHandler = fn => (req,next) =>
Promise.resolve(fn(req,next)).catch(next);
module.exports = asyncHandler;
errorResponse.js
class ErrorResponse extends Error {
constructor(message,statusCode) {
super(message);
this.statusCode = statusCode;
Error.captureStackTrace(this,this.constructor);
}
}
module.exports = ErrorResponse;
error.js
const ErrorResponse = require('../utils/errorResponse');
const { validationResult } = require('express-validator');
const errorHandler = (err,req,next) => {
let error = { ...err };
error.message = err.message;
// Log to console for dev
console.log(err);
// Mongoose bad ObjectId
if (err.name === 'CastError') {
const message = `Resource not found`;
error = new ErrorResponse(message,404);
}
// Mongoose duplicate key
if (err.code === 11000) {
const message = 'Duplicate field value entered';
error = new ErrorResponse(message,400);
}
// Mongoose validation error
if (err.name === 'ValidationError') {
// const errors = validationResult(req);
// const extractedErrors = []
// errors.array({ onlyFirstError: true }).map(err =>
extractedErrors.push({ [err.param]: err.msg }));
// // if (!errors.isEmpty()) {
// // return apiResponse.validationErrorWithData(res,"Validation
Error.",extractedErrors);
// // }
const message = Object.values(err.errors).map(val => val.message);
error = new ErrorResponse(message,400);
}
res.status(error.statusCode || 500).json({
success: false,error: error.message || 'Server Error'
});
};
module.exports = errorHandler;
server.js
const errorHandler = require('./middleware/error');
// Mount routers
app.use('/api/v1/auth',auth);
app.use('/api/v1/users',users);
app.use(errorHandler);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)