Javascript 在节点js中的单独文件中表示验证

Javascript 在节点js中的单独文件中表示验证,javascript,node.js,express-validator,Javascript,Node.js,Express Validator,我在一个单独的文件中添加了一个公共验证器,并希望重用它们 错误在auth.js下面的错误 Route.post()需要回调函数,但得到了一个[object Undefined] auth.js路由 const express = require('express'); const { commonValidation } = require('../validation/commonValidation'); const { validation } = require('../mid

我在一个单独的文件中添加了一个公共验证器,并希望重用它们

错误在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;
const { validationResult } = require('express-validator');
const asyncHandler = require('./async');


exports.exports = asyncHandler(async (req, res, 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));

 });
class ErrorResponse extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;

Error.captureStackTrace(this, this.constructor);
 }
}   

module.exports = ErrorResponse;
     const ErrorResponse = require('../utils/errorResponse');
     const { validationResult } = require('express-validator');

  const errorHandler = (err, req, res, 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;
const errorHandler = require('./middleware/error');
// Mount routers
app.use('/api/v1/auth', auth);
app.use('/api/v1/users', users);

app.use(errorHandler);
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);
  });
 const asyncHandler = fn => (req, res, next) =>
 Promise.resolve(fn(req, res, next)).catch(next);

 module.exports = asyncHandler;
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 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;
const { validationResult } = require('express-validator');
const asyncHandler = require('./async');


exports.exports = asyncHandler(async (req, res, 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));

 });
class ErrorResponse extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;

Error.captureStackTrace(this, this.constructor);
 }
}   

module.exports = ErrorResponse;
     const ErrorResponse = require('../utils/errorResponse');
     const { validationResult } = require('express-validator');

  const errorHandler = (err, req, res, 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;
const errorHandler = require('./middleware/error');
// Mount routers
app.use('/api/v1/auth', auth);
app.use('/api/v1/users', users);

app.use(errorHandler);
asyncHandler

 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);
  });
 const asyncHandler = fn => (req, res, next) =>
 Promise.resolve(fn(req, res, next)).catch(next);

 module.exports = asyncHandler;
errorResponse.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;
const { validationResult } = require('express-validator');
const asyncHandler = require('./async');


exports.exports = asyncHandler(async (req, res, 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));

 });
class ErrorResponse extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;

Error.captureStackTrace(this, this.constructor);
 }
}   

module.exports = ErrorResponse;
     const ErrorResponse = require('../utils/errorResponse');
     const { validationResult } = require('express-validator');

  const errorHandler = (err, req, res, 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;
const errorHandler = require('./middleware/error');
// Mount routers
app.use('/api/v1/auth', auth);
app.use('/api/v1/users', users);

app.use(errorHandler);
error.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;
const { validationResult } = require('express-validator');
const asyncHandler = require('./async');


exports.exports = asyncHandler(async (req, res, 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));

 });
class ErrorResponse extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;

Error.captureStackTrace(this, this.constructor);
 }
}   

module.exports = ErrorResponse;
     const ErrorResponse = require('../utils/errorResponse');
     const { validationResult } = require('express-validator');

  const errorHandler = (err, req, res, 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;
const errorHandler = require('./middleware/error');
// Mount routers
app.use('/api/v1/auth', auth);
app.use('/api/v1/users', users);

app.use(errorHandler);
server.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;
const { validationResult } = require('express-validator');
const asyncHandler = require('./async');


exports.exports = asyncHandler(async (req, res, 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));

 });
class ErrorResponse extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;

Error.captureStackTrace(this, this.constructor);
 }
}   

module.exports = ErrorResponse;
     const ErrorResponse = require('../utils/errorResponse');
     const { validationResult } = require('express-validator');

  const errorHandler = (err, req, res, 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;
const errorHandler = require('./middleware/error');
// Mount routers
app.use('/api/v1/auth', auth);
app.use('/api/v1/users', users);

app.use(errorHandler);

我想从express验证器中获取错误。但它给出了错误

我有一些相同的设置,但我使用它像
router.post('/register',commonValidation('register'),validation,register)。。。。。试着像这样改变它,你也可以查看我的回购协议