мы широко используем HAPI 18.4.0 с GraphQL для создания гибкого опыта путешествий. Мы хотим создать возможность загружать файлы через graphQL и сталкиваться с проблемами, связанными с анализом полезной нагрузки для многочастного типа запроса. Мы пишем код обработчика onPreAuth
, приведенный ниже.
const Hoek = require('@hapi/hoek');
const {processRequest} = require('graphql-upload');
/* Check whether the request type is 'multipart' and comes from apollo-graphql.
Don't parse the payload and set mimetype to 'multipart/form-data'.
Use processRequest from 'graphql-upload' to set the file data to the payload.
Else continue.
*/
const preMultipartRequestExaminer = (path) => {
return async (request, h) => {
const isContentTypeAvailable = request && request.raw && request.raw.req && request.raw.req.headers
&& request.raw.req.headers['content-type'];
if (isContentTypeAvailable
&& Hoek.reach(request, 'raw.req.headers.content-type').indexOf('multipart/form-data') > -1
&& request.path === path
&& request.method === 'post') {
request.route.settings.payload.parse = false;
request.mime = 'multipart/form-data';
request.pre.payload = await processRequest(request.raw.req, request.raw.res);
}
return h.continue;
};
};
Я устанавливаю request.route.settings.payload.parse = false. Но в изображение входят и другие запросы, которые выдаст ошибку, так как они хотят request.route.settings.payload.parse = true.
Как я могу изменить это и сделать изменение для запроса, а не изменять его на уровне маршрута? И я не могу восстановить разбор полезных данных в значение true, поскольку запросы имеют асинхронный характер c.
Решение основано на https://github.com/apollographql/apollo-server/issues/1680#issuecomment -446330178 (отредактировано)
Мы нашли примечание, приведенное ниже, в документах Hapi, документирующих еще один возможный способ обхода обработки полезной нагрузки для каждого запроса : https://hapi.dev/api/?v=19.1.1# -requestpayload
Полезная нагрузка запроса на основе настроек маршрута payload.output
и payload.parse
. Устанавливается в undefined в методах расширения 'onRequest' и может быть переопределено на любое неопределенное значение, чтобы обойти обработку полезной нагрузки. Но это похоже на свойство только для чтения в v18 hapi