У меня есть сервер NodeJS, который принимает данные формы, которые включают в себя токен Firebase
, номер телефона и файл.Я использую busboy
и express
, чтобы получить данные из формы.Код выглядит следующим образом:
function validateAuthToken(authToken) {
if (authToken) {
admin.auth().verifyIdToken(authToken).then(function(decodedToken) {
console.log("Verified auth token uid is:" + decodedToken.user_id);
return decodedToken;
}).catch(function(error) {
console.log("Failed to verify authToken with error:" + error);
});
}
}
}
app.post("/shout", function(req, res) {
var busboy = new Busboy({ headers: req.headers });
busboy.on('field', function(fieldName, value) {
var decodedToken = null;
var recPhone = null;
switch (fieldName) {
case constants.MSG_FORM_PART_AUTH_TOKEN:
decodedToken = validateAuthToken(value);
break;
case constants.MSG_FORM_PART_RECIPIENT_PHONE:
//validate the phone number only if the token is valid
recPhone = validatePhoneNumber(decodedToken.phone_number, value);
break;
}
});
busboy.on('file', function(fieldName, file) {
shoutFileName = path.join(constants.SHOUT_FILES_PATH, shortid.generate());
file.pipe(fs.createWriteStream(shoutFileName));
});
busboy.on('finish', function() {
//save the file if the token is valid
});
return req.pipe(busboy);
});
Моя проблема в том, что мне нужно закончить проверку токена, прежде чем я смогу проверить номер телефона или сохранить файл на сервере.verifyIdToken
использует обещание для проверки токена Firebase, поэтому я не могу использовать await на нем.Тем временем busboy
продолжает анализировать остальную часть запроса.Как мне сериализовать процесс?
Должен ли я сохранить все данные и начать проверку только после отправки события busboy
finish?