Skip to content

Commit 66d50e7

Browse files
committed
fix: s3 init
1 parent 0ab9b17 commit 66d50e7

File tree

1 file changed

+37
-10
lines changed

1 file changed

+37
-10
lines changed

lib/s3/index.ts

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -99,31 +99,58 @@ const createS3Service = async (bucket: string, isPublic: boolean) => {
9999
return new S3Service(client, externalClient);
100100
};
101101

102-
declare global {
103-
var _publicS3Server: S3Service;
104-
var _privateS3Server: S3Service;
105-
}
102+
const s3ServiceInstances: {
103+
publicS3Server: S3Service | null;
104+
privateS3Server: S3Service | null;
105+
} = {
106+
publicS3Server: null,
107+
privateS3Server: null
108+
};
106109

107110
export const initS3Service = async () => {
108111
const logger = getLogger(infra.storage);
109112
logger.info('Initializing S3 service...');
110113
const { publicBucket, privateBucket } = getConfig();
111114

112115
try {
113-
if (!globalThis._publicS3Server) {
116+
if (!s3ServiceInstances.publicS3Server) {
114117
logger.debug('Initializing public S3 service...');
115-
globalThis._publicS3Server = await createS3Service(publicBucket, true);
118+
s3ServiceInstances.publicS3Server = await createS3Service(publicBucket, true);
116119
}
117120

118-
if (!globalThis._privateS3Server) {
121+
if (!s3ServiceInstances.privateS3Server) {
119122
logger.debug('Initializing private S3 service...');
120-
globalThis._privateS3Server = await createS3Service(privateBucket, false);
123+
s3ServiceInstances.privateS3Server = await createS3Service(privateBucket, false);
121124
}
122125
} catch (e) {
123126
logger.error('Failed to initialize S3 service:', { error: e });
124127
throw new Error('Failed to initialize S3 service');
125128
}
126129
};
127130

128-
export const publicS3Server = globalThis._publicS3Server;
129-
export const privateS3Server = globalThis._privateS3Server;
131+
export const getPublicS3Server = (): S3Service => {
132+
if (!s3ServiceInstances.publicS3Server) {
133+
throw new Error('Public S3 service not initialized. Call initS3Service() first.');
134+
}
135+
return s3ServiceInstances.publicS3Server;
136+
};
137+
138+
export const getPrivateS3Server = (): S3Service => {
139+
if (!s3ServiceInstances.privateS3Server) {
140+
throw new Error('Private S3 service not initialized. Call initS3Service() first.');
141+
}
142+
return s3ServiceInstances.privateS3Server;
143+
};
144+
145+
// 为了向后兼容,保留旧的导出方式(但使用 getter)
146+
export const publicS3Server = new Proxy({} as S3Service, {
147+
get(_, prop) {
148+
return getPublicS3Server()[prop as keyof S3Service];
149+
}
150+
});
151+
152+
export const privateS3Server = new Proxy({} as S3Service, {
153+
get(_, prop) {
154+
return getPrivateS3Server()[prop as keyof S3Service];
155+
}
156+
});

0 commit comments

Comments
 (0)