Как загрузить среду fastify-env синхронно?
Я работаю над микросервисом fastify и хотел бы использовать библиотеку fastify-env для проверки моих входных данных env и обеспечения значений по умолчанию для всего приложения.
const fastify = require('fastify')()
fastify.register(require('fastify-env'), {
schema: {
type: 'object',
properties: {
PORT: { type: 'string', default: 3000 }
}
}
})
console.log(fastify.config) // undefined
const start = async opts => {
try {
console.log('config', fastify.config) // config undefined
await fastify.listen(3000, '::')
console.log('after', fastify.config) // after { PORT: '3000' }
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
Как я могу использовать fastify.config
объект до запуска сервера?
3 ответа
Использовать ready()
https://www.fastify.io/docs/latest/Server/, чтобы дождаться загрузки всех плагинов. Тогда позвониlisten()
с вашей переменной конфигурации.
try {
await fastify.ready(); // will load all plugins
await fastify.listen(...);
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
Концепция Fastify построена так, как будто вы добавляете зависимости через реестр. И тогда все будет загружено, когда мы запустим экземпляр fastify с помощью метода Ready или прослушаем : https://fastify.dev/docs/latest/Reference/Server/#ready
async function bootstrap() {
// ------- Compile time in fastify lifecycle ----------
const serverInstance = require('fastify')();
serverInstance.register(envPlugin); // Register but not run the plugin at this moment.
console.log(serverInstance.config); // When you try to access config, there is no config added into fastify container
// ------- End Compile time in fastify lifecycle----------
// ------- Run time -> Loading plugins ----------
try {
await serverInstance.ready(); // This will wait all the plugins loaded into fastify container
console.log(serverInstance.config); // Now everything is loaded, log will contains values
}
}
bootstrap();
fastify.register
загружает плагины асинхронно AFAIK. Если вы хотите сразу использовать вещи из определенного плагина, используйте:
fastify
.register(plugin)
.after(() => {
// This particular plugin is ready!
});