由于ES6中的一个模块,我不得不将我的整个应用程序迁移到ES6。
但是现在,由于import是异步的,我的代码流出现了问题。
index.js
import joi from 'joi';
import dotenv from 'dotenv';
const config = dotenv.config();
if (config.error) {
console.error(config.error);
process.exit(1);
}
const configError = joi.object({
HTTP_URL_FRONT: joi.string().uri().required(),
JWT_SECRET: joi.string().required(),
DIR_DATA: joi.string().required(),
DIR_TMP: joi.string().required(),
MONGODB_URI: joi.string().required()
}).required().validate(config.parsed).error;
if (configError) {
console.error(".env invalide", configError);
process.exit(1);
}
console.log("1", process.env.HTTP_URL_FRONT)
import './services/mongoose.service.js';
console.log("3", process.env.HTTP_URL_FRONT)
服务/mongoose.service.js
console.log("2", process.env.HTTP_URL_FRONT);
import mongoose from 'mongoose';
(async function () {
await mongoose.connect(process.env.MONGODB_URI);
})().catch(e => {
console.error(e);
process.exit(1);
});
export default mongoose;
结果
2 undefined
1 http://localhost
3 http://localhost
MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
可以看到,之前已经完成了导入,这会中断与Mongo的连接。你有解决办法吗?
您可以在希望导入发生的行中使用顶级await和await import('./services/mongoose.service.js');
来实现这一点,但我建议的是正确声明您的mongoose服务对加载配置的依赖:
// config.js
import joi from 'joi';
import dotenv from 'dotenv';
const config = dotenv.config();
if (config.error) {
throw config.error;
}
const configError = joi.object({
HTTP_URL_FRONT: joi.string().uri().required(),
JWT_SECRET: joi.string().required(),
DIR_DATA: joi.string().required(),
DIR_TMP: joi.string().required(),
MONGODB_URI: joi.string().required()
}).required().validate(config.parsed).error;
if (configError) {
throw new Error(".env invalide", {cause: configError});
}
console.log("1", config.parsed.HTTP_URL_FRONT)
export default config.parsed;
// services/mongoose.service.js
import mongoose from 'mongoose';
import config from '../config.js';
console.log("2", config.HTTP_URL_FRONT);
await mongoose.connect(config.MONGODB_URI);
export default mongoose;
// index.js
import './services/mongoose.service.js';
console.log("3: config loaded and mongoose connected")