我正在使用node.js和Graphql而不使用Express,以验证我使用Joi的输入,所以在我的突变解析器中我这样做了:
async user(_, { input }, { dataSources }) {
if (process.env.NODE_ENV === 'development') {
debug(input);
}
// Validation
if (input.role === 'user') {
debug('validate user creation schema');
validate(userSchemas.userRegisterSchema.post, input);
} else if (input.role === 'pro') {
debug('validate pro creation schema');
validate(userSchemas.userProRegisterSchema);
} else {
throw new Error('Bad input error');
}
所以这是验证函数文件夹中的代码:
import Debug from 'debug';
import BadInputError from '../errors/BadInputError.js';
/*
* validate module.
* @module validate
*/
const debug = Debug(`${process.env.DEBUG_MODULE}:validation`);
// function to validate the input data
async function validate(schema, inputData) {
try {
debug('validate input data');
await schema.validateAsync(inputData);
} catch (error) {
debug('validation error');
throw new BadInputError(error);
}
}
export default validate;
当输入错误时,我会出现错误,但服务器崩溃,我不希望服务器崩溃...... 请问你有什么想法吗? 谢谢你
我尝试了很多东西,有回报,也有一些 IA 的想法,但没有什么好的。
您不需要从其他条件引发错误。
throw new Error('Bad input error');
当promise被拒绝时,这个错误没有任何处理。 如果需要,您还可以在流程级别使用 unhandledRejection 事件。 https://nodejs.org/api/process.html#event-unhandledrejection
或者只需使用您的记录器进行记录。
'Bad input error'