Javascript 在节点js中的单独文件中表示验证
我在一个单独的文件中添加了一个公共验证器,并希望重用它们 错误在auth.js下面的错误 Route.post()需要回调函数,但得到了一个[object Undefined] auth.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
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)代码>。。。。。试着像这样改变它,你也可以查看我的回购协议