@danqiusheng/nest-nacos 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.en.md +167 -29
- package/README.md +420 -73
- package/dist/nacos.interfaces.d.ts +17 -2
- package/dist/nacos.interfaces.d.ts.map +1 -1
- package/dist/nacos.module.d.ts +2 -2
- package/dist/nacos.module.d.ts.map +1 -1
- package/dist/nacos.module.js +3 -3
- package/dist/nacos.module.js.map +1 -1
- package/dist/nacos.providers.d.ts +3 -1
- package/dist/nacos.providers.d.ts.map +1 -1
- package/dist/nacos.providers.js +25 -0
- package/dist/nacos.providers.js.map +1 -1
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.0 (unreleased)
|
|
4
|
+
|
|
5
|
+
- Add shared top-level `serverAddr`, `namespace`, `username`, `password`, and
|
|
6
|
+
`ssl` options so Naming and Config no longer require duplicate connection
|
|
7
|
+
settings.
|
|
8
|
+
- Add `NacosModule.forRoot('host:8848')` as the smallest setup form.
|
|
9
|
+
- Expand the Chinese and English usage documentation.
|
|
10
|
+
|
|
3
11
|
## 1.1.0
|
|
4
12
|
|
|
5
13
|
- Fix asynchronous server status and health checks.
|
package/README.en.md
CHANGED
|
@@ -2,58 +2,196 @@
|
|
|
2
2
|
|
|
3
3
|
Nacos 2.x configuration and service-discovery integration for NestJS 10/11.
|
|
4
4
|
|
|
5
|
-
## Compatibility
|
|
6
|
-
|
|
7
|
-
| Component | Supported |
|
|
8
|
-
|---|---|
|
|
9
|
-
| Node.js | >= 16 |
|
|
10
|
-
| NestJS | 10.x, 11.x |
|
|
11
|
-
| Nacos Node SDK | `nacos` 2.6.x |
|
|
12
|
-
| Nacos Server | 2.x; end-to-end tested against 2.5.3 |
|
|
13
|
-
| Nacos Server 3.x / gRPC | Not supported |
|
|
14
|
-
|
|
15
|
-
The underlying SDK only implements the legacy HTTP OpenAPI. The plugin rejects
|
|
16
|
-
`transport: 'grpc'` instead of silently claiming a transport it does not use.
|
|
17
|
-
The Nest application does not require Java. Java is only needed when running a
|
|
18
|
-
Nacos Server locally.
|
|
19
|
-
|
|
20
5
|
## Install
|
|
21
6
|
|
|
22
7
|
```bash
|
|
23
8
|
npm install @danqiusheng/nest-nacos nacos
|
|
24
9
|
```
|
|
25
10
|
|
|
26
|
-
##
|
|
11
|
+
## Minimal setup
|
|
12
|
+
|
|
13
|
+
One address enables both Naming and Config clients:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
NacosModule.forRoot('127.0.0.1:8848');
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Authentication and a custom namespace are still configured once:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
NacosModule.forRoot({
|
|
23
|
+
serverAddr: '127.0.0.1:8848',
|
|
24
|
+
namespace: 'production',
|
|
25
|
+
username: process.env.NACOS_USERNAME,
|
|
26
|
+
password: process.env.NACOS_PASSWORD,
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The public namespace and `DEFAULT_GROUP` are used by default. `serverAddr`
|
|
31
|
+
also accepts an array of server addresses.
|
|
32
|
+
|
|
33
|
+
## Async setup
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
NacosModule.forRootAsync({
|
|
37
|
+
inject: [ConfigService],
|
|
38
|
+
useFactory: (config: ConfigService) => ({
|
|
39
|
+
serverAddr: config.getOrThrow<string>('NACOS_SERVER_ADDR'),
|
|
40
|
+
namespace: config.get<string>('NACOS_NAMESPACE') ?? 'public',
|
|
41
|
+
username: config.get<string>('NACOS_USERNAME'),
|
|
42
|
+
password: config.get<string>('NACOS_PASSWORD'),
|
|
43
|
+
}),
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`useFactory`, `useClass`, and `useExisting` are supported.
|
|
48
|
+
|
|
49
|
+
## Automatic registration
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
NacosModule.forRoot({
|
|
53
|
+
serverAddr: '127.0.0.1:8848',
|
|
54
|
+
instances: [
|
|
55
|
+
{
|
|
56
|
+
serviceName: 'orders',
|
|
57
|
+
ip: '10.0.0.5',
|
|
58
|
+
port: 3000,
|
|
59
|
+
metadata: { environment: 'production' },
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Plugin-managed instances are deregistered when the Nest module is destroyed.
|
|
66
|
+
|
|
67
|
+
## Service discovery
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
constructor(
|
|
71
|
+
@InjectNacosNaming()
|
|
72
|
+
private readonly naming: NacosNamingService,
|
|
73
|
+
) {}
|
|
74
|
+
|
|
75
|
+
const instance = await this.naming.selectInstance('payments', {
|
|
76
|
+
strategy: 'roundRobin', // random | roundRobin | weighted
|
|
77
|
+
metadata: { environment: 'production' },
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Manual registration and subscriptions are also available:
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
await this.naming.register(instanceOptions);
|
|
85
|
+
await this.naming.deregister(instanceOptions);
|
|
86
|
+
|
|
87
|
+
this.naming.subscribe('payments', listener);
|
|
88
|
+
this.naming.unSubscribe('payments', listener);
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Configuration center
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
constructor(
|
|
95
|
+
@InjectNacosConfig()
|
|
96
|
+
private readonly nacos: NacosConfigService,
|
|
97
|
+
) {}
|
|
98
|
+
|
|
99
|
+
const raw = await this.nacos.getConfig('application.yaml');
|
|
100
|
+
const parsed = await this.nacos.getParsedConfig<AppConfig>(
|
|
101
|
+
'application.yaml',
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
this.nacos.subscribe(
|
|
105
|
+
'application.yaml',
|
|
106
|
+
'DEFAULT_GROUP',
|
|
107
|
+
(content, value) => console.log(value),
|
|
108
|
+
);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
JSON, YAML, Properties, and text are supported. Each `dataId + group` uses one
|
|
112
|
+
underlying SDK subscription, regardless of the number of business listeners.
|
|
113
|
+
|
|
114
|
+
Publish and remove configuration with:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
await this.nacos.publish('application.json', 'DEFAULT_GROUP', content);
|
|
118
|
+
await this.nacos.remove('application.json', 'DEFAULT_GROUP');
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Preload and fallback cache
|
|
27
122
|
|
|
28
123
|
```ts
|
|
29
124
|
NacosModule.forRoot({
|
|
30
|
-
|
|
31
|
-
naming: { serverList: '127.0.0.1:8848', namespace: 'public' },
|
|
32
|
-
instances: [{ serviceName: 'api', ip: '10.0.0.5', port: 3000 }],
|
|
125
|
+
serverAddr: '127.0.0.1:8848',
|
|
33
126
|
subscribeConfigs: [
|
|
34
127
|
{ dataId: 'application.yaml', format: 'yaml' },
|
|
35
128
|
{ dataId: 'database.properties', format: 'properties' },
|
|
36
129
|
],
|
|
37
130
|
configLoading: {
|
|
38
|
-
failureMode: 'fallback',
|
|
131
|
+
failureMode: 'fallback', // throw | fallback | continue
|
|
39
132
|
cacheDir: '.nacos-cache',
|
|
40
133
|
retry: { attempts: 3, delayMs: 300 },
|
|
41
134
|
},
|
|
42
135
|
});
|
|
136
|
+
|
|
137
|
+
const merged = await this.nacos.getMergedConfig<AppConfig>();
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Successful remote loads update cache files atomically. In `fallback` mode the
|
|
141
|
+
cache is used when Nacos is unavailable.
|
|
142
|
+
|
|
143
|
+
## Advanced client-specific options
|
|
144
|
+
|
|
145
|
+
Nested options are only needed when Naming and Config use different settings:
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
NacosModule.forRoot({
|
|
149
|
+
naming: {
|
|
150
|
+
serverList: 'naming.example:8848',
|
|
151
|
+
namespace: 'services',
|
|
152
|
+
},
|
|
153
|
+
config: {
|
|
154
|
+
serverAddr: 'config.example:8848',
|
|
155
|
+
namespace: 'configuration',
|
|
156
|
+
},
|
|
157
|
+
});
|
|
43
158
|
```
|
|
44
159
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
160
|
+
Nested fields override shared top-level fields. Supplying only `naming` or
|
|
161
|
+
only `config` enables only that client.
|
|
162
|
+
|
|
163
|
+
## Health and raw clients
|
|
49
164
|
|
|
50
165
|
Both health APIs are asynchronous:
|
|
51
166
|
|
|
52
167
|
```ts
|
|
53
|
-
await naming.getServerStatus();
|
|
54
|
-
await healthIndicator.isHealthy();
|
|
168
|
+
await this.naming.getServerStatus();
|
|
169
|
+
await this.healthIndicator.isHealthy();
|
|
55
170
|
```
|
|
56
171
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
172
|
+
Use `@InjectNacosNamingClient()` and `@InjectNacosConfigClient()` only when an
|
|
173
|
+
underlying SDK API is not exposed by the plugin. The module owns and closes
|
|
174
|
+
both clients.
|
|
175
|
+
|
|
176
|
+
## Compatibility
|
|
177
|
+
|
|
178
|
+
| Component | Supported |
|
|
179
|
+
|---|---|
|
|
180
|
+
| Node.js | >= 16 |
|
|
181
|
+
| NestJS | 10.x, 11.x |
|
|
182
|
+
| Nacos Node SDK | `nacos` 2.6.x |
|
|
183
|
+
| Nacos Server | 2.x; tested against 2.5.3 |
|
|
184
|
+
| Nacos Server 3.x / gRPC | Not supported |
|
|
185
|
+
|
|
186
|
+
The underlying SDK implements the HTTP OpenAPI, not the Nacos 3.x gRPC
|
|
187
|
+
protocol. The plugin rejects `transport: 'grpc'` instead of silently falling
|
|
188
|
+
back. Java is required only to run a local Nacos Server, not by the NestJS
|
|
189
|
+
plugin itself.
|
|
190
|
+
|
|
191
|
+
## Verify
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
npm ci
|
|
195
|
+
npm run build
|
|
196
|
+
npm test
|
|
197
|
+
```
|
package/README.md
CHANGED
|
@@ -2,124 +2,471 @@
|
|
|
2
2
|
|
|
3
3
|
面向 NestJS 10/11 的 Nacos 2.x 配置中心与服务注册发现模块。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 1. 安装
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install @danqiusheng/nest-nacos nacos
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 2. 最简接入
|
|
12
|
+
|
|
13
|
+
未开启 Nacos 鉴权时,只需要一个地址:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { Module } from '@nestjs/common';
|
|
17
|
+
import { NacosModule } from '@danqiusheng/nest-nacos';
|
|
18
|
+
|
|
19
|
+
@Module({
|
|
20
|
+
imports: [NacosModule.forRoot('127.0.0.1:8848')],
|
|
21
|
+
})
|
|
22
|
+
export class AppModule {}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
这会同时启用配置中心和服务注册发现,默认使用:
|
|
26
|
+
|
|
27
|
+
| 配置 | 默认值 |
|
|
8
28
|
|---|---|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
| Nacos Server 3.x | 不支持 |
|
|
14
|
-
| 传输协议 | Nacos 1.x HTTP OpenAPI;不支持 gRPC |
|
|
29
|
+
| namespace | `public` |
|
|
30
|
+
| group | `DEFAULT_GROUP` |
|
|
31
|
+
| transport | HTTP OpenAPI |
|
|
32
|
+
| 重试次数 | 3 次(包含第一次调用) |
|
|
15
33
|
|
|
16
|
-
|
|
17
|
-
`transport: 'grpc'`,避免请求返回成功但服务端没有落盘的假成功。
|
|
34
|
+
开启用户名密码鉴权时,也只需要配置一次连接信息:
|
|
18
35
|
|
|
19
|
-
|
|
36
|
+
```ts
|
|
37
|
+
NacosModule.forRoot({
|
|
38
|
+
serverAddr: '127.0.0.1:8848',
|
|
39
|
+
username: 'nacos',
|
|
40
|
+
password: 'nacos',
|
|
41
|
+
});
|
|
42
|
+
```
|
|
20
43
|
|
|
21
|
-
|
|
44
|
+
`serverAddr` 支持集群地址数组:
|
|
22
45
|
|
|
23
|
-
```
|
|
24
|
-
|
|
46
|
+
```ts
|
|
47
|
+
NacosModule.forRoot({
|
|
48
|
+
serverAddr: ['10.0.0.11:8848', '10.0.0.12:8848'],
|
|
49
|
+
namespace: 'production',
|
|
50
|
+
username: process.env.NACOS_USERNAME,
|
|
51
|
+
password: process.env.NACOS_PASSWORD,
|
|
52
|
+
ssl: false,
|
|
53
|
+
});
|
|
25
54
|
```
|
|
26
55
|
|
|
27
|
-
##
|
|
56
|
+
## 3. 使用环境变量
|
|
57
|
+
|
|
58
|
+
插件不会隐式读取环境变量。推荐使用 Nest `ConfigModule` 明确传入配置:
|
|
28
59
|
|
|
29
60
|
```ts
|
|
30
61
|
import { Module } from '@nestjs/common';
|
|
62
|
+
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
31
63
|
import { NacosModule } from '@danqiusheng/nest-nacos';
|
|
32
64
|
|
|
33
65
|
@Module({
|
|
34
66
|
imports: [
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
namespace: 'public',
|
|
45
|
-
username: 'nacos',
|
|
46
|
-
password: 'nacos',
|
|
47
|
-
},
|
|
48
|
-
instances: [{
|
|
49
|
-
serviceName: 'order-service',
|
|
50
|
-
ip: '192.168.1.20',
|
|
51
|
-
port: 3000,
|
|
52
|
-
weight: 1,
|
|
53
|
-
metadata: { env: 'prod', version: '1.1.0' },
|
|
54
|
-
}],
|
|
55
|
-
subscribeConfigs: [
|
|
56
|
-
{ dataId: 'application.yaml', format: 'yaml' },
|
|
57
|
-
{ dataId: 'database.properties', format: 'properties' },
|
|
58
|
-
],
|
|
59
|
-
configLoading: {
|
|
60
|
-
failureMode: 'fallback',
|
|
61
|
-
cacheDir: '.nacos-cache',
|
|
62
|
-
retry: { attempts: 3, delayMs: 300 },
|
|
63
|
-
},
|
|
67
|
+
ConfigModule.forRoot({ isGlobal: true }),
|
|
68
|
+
NacosModule.forRootAsync({
|
|
69
|
+
inject: [ConfigService],
|
|
70
|
+
useFactory: (config: ConfigService) => ({
|
|
71
|
+
serverAddr: config.getOrThrow<string>('NACOS_SERVER_ADDR'),
|
|
72
|
+
namespace: config.get<string>('NACOS_NAMESPACE') ?? 'public',
|
|
73
|
+
username: config.get<string>('NACOS_USERNAME'),
|
|
74
|
+
password: config.get<string>('NACOS_PASSWORD'),
|
|
75
|
+
}),
|
|
64
76
|
}),
|
|
65
77
|
],
|
|
66
78
|
})
|
|
67
79
|
export class AppModule {}
|
|
68
80
|
```
|
|
69
81
|
|
|
70
|
-
`
|
|
82
|
+
`.env` 示例:
|
|
83
|
+
|
|
84
|
+
```dotenv
|
|
85
|
+
NACOS_SERVER_ADDR=127.0.0.1:8848
|
|
86
|
+
NACOS_NAMESPACE=public
|
|
87
|
+
NACOS_USERNAME=nacos
|
|
88
|
+
NACOS_PASSWORD=nacos
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`forRootAsync` 同时支持 `useFactory`、`useClass` 和 `useExisting`。
|
|
92
|
+
|
|
93
|
+
## 4. 自动注册当前服务
|
|
94
|
+
|
|
95
|
+
在模块配置中加入 `instances`,应用启动时自动注册,关闭时自动注销:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
NacosModule.forRoot({
|
|
99
|
+
serverAddr: '127.0.0.1:8848',
|
|
100
|
+
instances: [
|
|
101
|
+
{
|
|
102
|
+
serviceName: 'order-service',
|
|
103
|
+
ip: '192.168.1.20',
|
|
104
|
+
port: 3000,
|
|
105
|
+
weight: 1,
|
|
106
|
+
ephemeral: true,
|
|
107
|
+
metadata: { env: 'prod', version: '1.2.0' },
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
如果 IP 或端口来自环境变量,应使用 `forRootAsync` 构造 `instances`。
|
|
114
|
+
|
|
115
|
+
## 5. 服务注册与发现
|
|
71
116
|
|
|
72
|
-
|
|
117
|
+
### 注入服务
|
|
73
118
|
|
|
74
119
|
```ts
|
|
75
120
|
import { Injectable } from '@nestjs/common';
|
|
76
|
-
import {
|
|
121
|
+
import {
|
|
122
|
+
InjectNacosNaming,
|
|
123
|
+
NacosNamingService,
|
|
124
|
+
} from '@danqiusheng/nest-nacos';
|
|
125
|
+
|
|
126
|
+
@Injectable()
|
|
127
|
+
export class ServiceDiscovery {
|
|
128
|
+
constructor(
|
|
129
|
+
@InjectNacosNaming()
|
|
130
|
+
private readonly naming: NacosNamingService,
|
|
131
|
+
) {}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
也可以直接使用构造器注入 `NacosNamingService`。
|
|
136
|
+
|
|
137
|
+
### 手动注册和注销
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
const instance = {
|
|
141
|
+
serviceName: 'payment-service',
|
|
142
|
+
ip: '192.168.1.30',
|
|
143
|
+
port: 3000,
|
|
144
|
+
metadata: { env: 'prod' },
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
await this.naming.register(instance);
|
|
148
|
+
await this.naming.deregister(instance);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
通过插件注册的实例会被记录,Nest 模块销毁时会自动注销。
|
|
152
|
+
|
|
153
|
+
### 获取健康实例
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
const instances = await this.naming.selectInstances('payment-service');
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
只选择一个实例:
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
const instance = await this.naming.selectInstance('payment-service', {
|
|
163
|
+
strategy: 'roundRobin',
|
|
164
|
+
metadata: { env: 'prod' },
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
支持三种策略:
|
|
169
|
+
|
|
170
|
+
| strategy | 行为 |
|
|
171
|
+
|---|---|
|
|
172
|
+
| `random` | 随机选择,默认值 |
|
|
173
|
+
| `roundRobin` | 按服务轮询 |
|
|
174
|
+
| `weighted` | 按 Nacos 实例权重随机选择 |
|
|
175
|
+
|
|
176
|
+
找不到满足健康状态和 metadata 条件的实例时,`selectInstance()` 会抛出异常。
|
|
177
|
+
|
|
178
|
+
### 订阅服务变化
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
const listener = (hosts: unknown[]) => {
|
|
182
|
+
console.log('payment-service 实例变化', hosts);
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
this.naming.subscribe('payment-service', listener);
|
|
186
|
+
this.naming.unSubscribe('payment-service', listener);
|
|
187
|
+
|
|
188
|
+
// 不传 listener:取消该服务的全部本地订阅
|
|
189
|
+
this.naming.unSubscribe('payment-service');
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 更新权重
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
await this.naming.updateWeight(instance, 0.5);
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## 6. 配置中心
|
|
199
|
+
|
|
200
|
+
### 注入服务
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
import { Injectable } from '@nestjs/common';
|
|
204
|
+
import {
|
|
205
|
+
InjectNacosConfig,
|
|
206
|
+
NacosConfigService,
|
|
207
|
+
} from '@danqiusheng/nest-nacos';
|
|
77
208
|
|
|
78
209
|
@Injectable()
|
|
79
210
|
export class SettingsService {
|
|
80
|
-
constructor(
|
|
211
|
+
constructor(
|
|
212
|
+
@InjectNacosConfig()
|
|
213
|
+
private readonly nacos: NacosConfigService,
|
|
214
|
+
) {}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
81
217
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
218
|
+
### 读取配置
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
const raw = await this.nacos.getConfig('application.yaml');
|
|
87
222
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
223
|
+
const config = await this.nacos.getParsedConfig<{
|
|
224
|
+
server: { port: number };
|
|
225
|
+
}>('application.yaml');
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
格式默认根据 `dataId` 后缀自动识别:
|
|
229
|
+
|
|
230
|
+
| 后缀/format | 返回值 |
|
|
231
|
+
|---|---|
|
|
232
|
+
| `.json` / `json` | JSON 对象或数组 |
|
|
233
|
+
| `.yaml`、`.yml` / `yaml` | YAML 解析结果 |
|
|
234
|
+
| `.properties` / `properties` | 键值对象 |
|
|
235
|
+
| 其他 / `txt` | 原始字符串 |
|
|
236
|
+
|
|
237
|
+
强制按 JSON 解析:
|
|
238
|
+
|
|
239
|
+
```ts
|
|
240
|
+
const config = await this.nacos.getConfigAsJson<AppConfig>(
|
|
241
|
+
'application.json',
|
|
242
|
+
);
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 发布和删除配置
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
const published = await this.nacos.publish(
|
|
249
|
+
'application.json',
|
|
250
|
+
'DEFAULT_GROUP',
|
|
251
|
+
JSON.stringify({ featureEnabled: true }),
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
const removed = await this.nacos.remove(
|
|
255
|
+
'application.json',
|
|
256
|
+
'DEFAULT_GROUP',
|
|
257
|
+
);
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
返回值为 Nacos SDK 的最终布尔结果。public namespace 删除已处理 `tenant=public` 导致的假成功问题。
|
|
261
|
+
|
|
262
|
+
### 订阅热更新
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
const listener = (raw: string, parsed?: unknown) => {
|
|
266
|
+
console.log('配置已更新', parsed);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
this.nacos.subscribe(
|
|
270
|
+
'application.yaml',
|
|
271
|
+
'DEFAULT_GROUP',
|
|
272
|
+
listener,
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
this.nacos.unSubscribe(
|
|
276
|
+
'application.yaml',
|
|
277
|
+
'DEFAULT_GROUP',
|
|
278
|
+
listener,
|
|
279
|
+
);
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
同一个 `dataId + group` 只建立一个底层 SDK 订阅,多个业务 listener 不会导致重复回调。
|
|
283
|
+
|
|
284
|
+
## 7. 启动时预加载配置
|
|
285
|
+
|
|
286
|
+
```ts
|
|
287
|
+
NacosModule.forRoot({
|
|
288
|
+
serverAddr: '127.0.0.1:8848',
|
|
289
|
+
subscribeConfigs: [
|
|
290
|
+
{ dataId: 'application.yaml', format: 'yaml' },
|
|
291
|
+
{ dataId: 'database.properties', format: 'properties' },
|
|
292
|
+
{
|
|
293
|
+
dataId: 'optional.json',
|
|
294
|
+
required: false,
|
|
295
|
+
subscribe: false,
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
默认行为:
|
|
302
|
+
|
|
303
|
+
- group 为 `DEFAULT_GROUP`。
|
|
304
|
+
- format 为 `auto`。
|
|
305
|
+
- `subscribe: true`,预加载后继续监听热更新。
|
|
306
|
+
- `required: true`,读取失败会按启动失败策略处理。
|
|
307
|
+
|
|
308
|
+
合并所有已声明配置:
|
|
309
|
+
|
|
310
|
+
```ts
|
|
311
|
+
const merged = await this.nacos.getMergedConfig<AppConfig>();
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
对象会按声明顺序深度合并,后面的配置覆盖前面的同名字段。
|
|
315
|
+
|
|
316
|
+
## 8. 本地缓存和启动失败策略
|
|
317
|
+
|
|
318
|
+
```ts
|
|
319
|
+
NacosModule.forRoot({
|
|
320
|
+
serverAddr: '127.0.0.1:8848',
|
|
321
|
+
subscribeConfigs: [{ dataId: 'application.yaml' }],
|
|
322
|
+
configLoading: {
|
|
323
|
+
failureMode: 'fallback',
|
|
324
|
+
cacheDir: '.nacos-cache',
|
|
325
|
+
retry: {
|
|
326
|
+
attempts: 3,
|
|
327
|
+
delayMs: 300,
|
|
328
|
+
backoffFactor: 2,
|
|
329
|
+
maxDelayMs: 3000,
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
| failureMode | 行为 |
|
|
336
|
+
|---|---|
|
|
337
|
+
| `throw` | 读取必需配置失败时阻止应用启动,默认值 |
|
|
338
|
+
| `fallback` | 优先读取本地缓存;无缓存且配置必需时阻止启动 |
|
|
339
|
+
| `continue` | 记录警告并继续启动 |
|
|
340
|
+
|
|
341
|
+
成功从 Nacos 读取配置后,插件会原子更新缓存文件。缓存目录应加入部署持久化目录,不建议提交到 Git。
|
|
342
|
+
|
|
343
|
+
## 9. 健康检查
|
|
344
|
+
|
|
345
|
+
`getServerStatus()` 和 `isHealthy()` 都是异步方法:
|
|
346
|
+
|
|
347
|
+
```ts
|
|
348
|
+
const status = await this.naming.getServerStatus(); // UP | DOWN
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
可直接提供 Nest HTTP 健康接口:
|
|
352
|
+
|
|
353
|
+
```ts
|
|
354
|
+
import { Controller, Get } from '@nestjs/common';
|
|
355
|
+
import { NacosHealthIndicator } from '@danqiusheng/nest-nacos';
|
|
356
|
+
|
|
357
|
+
@Controller('health/nacos')
|
|
358
|
+
export class NacosHealthController {
|
|
359
|
+
constructor(private readonly health: NacosHealthIndicator) {}
|
|
360
|
+
|
|
361
|
+
@Get()
|
|
362
|
+
check() {
|
|
363
|
+
return this.health.isHealthy();
|
|
92
364
|
}
|
|
93
365
|
}
|
|
94
366
|
```
|
|
95
367
|
|
|
96
|
-
|
|
368
|
+
返回:
|
|
369
|
+
|
|
370
|
+
```json
|
|
371
|
+
{ "status": "up" }
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
## 10. 高级连接配置
|
|
97
375
|
|
|
98
|
-
|
|
376
|
+
绝大多数项目只需要顶层共享配置。只有 Naming 和 Config 使用不同地址、命名空间或云鉴权参数时,才使用嵌套配置:
|
|
99
377
|
|
|
100
378
|
```ts
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
379
|
+
NacosModule.forRoot({
|
|
380
|
+
serverAddr: 'shared-nacos:8848',
|
|
381
|
+
username: 'shared-user',
|
|
382
|
+
password: 'shared-password',
|
|
383
|
+
|
|
384
|
+
naming: {
|
|
385
|
+
serverList: 'naming-nacos:8848',
|
|
386
|
+
namespace: 'service-space',
|
|
387
|
+
appName: 'order-service',
|
|
388
|
+
},
|
|
389
|
+
config: {
|
|
390
|
+
serverAddr: 'config-nacos:8848',
|
|
391
|
+
namespace: 'config-space',
|
|
392
|
+
accessKey: process.env.NACOS_ACCESS_KEY,
|
|
393
|
+
secretKey: process.env.NACOS_SECRET_KEY,
|
|
394
|
+
},
|
|
104
395
|
});
|
|
396
|
+
```
|
|
105
397
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
398
|
+
嵌套配置优先于顶层共享配置。只配置 `naming` 或只配置 `config`,可以只启用对应能力。
|
|
399
|
+
|
|
400
|
+
## 11. 原始 SDK 客户端
|
|
401
|
+
|
|
402
|
+
只有插件服务未覆盖 SDK 能力时才建议使用:
|
|
403
|
+
|
|
404
|
+
```ts
|
|
405
|
+
import {
|
|
406
|
+
InjectNacosConfigClient,
|
|
407
|
+
InjectNacosNamingClient,
|
|
408
|
+
} from '@danqiusheng/nest-nacos';
|
|
409
|
+
import type {
|
|
410
|
+
NacosConfigClient,
|
|
411
|
+
NacosNamingClient,
|
|
412
|
+
} from 'nacos';
|
|
413
|
+
|
|
414
|
+
constructor(
|
|
415
|
+
@InjectNacosNamingClient()
|
|
416
|
+
private readonly namingClient: NacosNamingClient,
|
|
417
|
+
@InjectNacosConfigClient()
|
|
418
|
+
private readonly configClient: NacosConfigClient,
|
|
419
|
+
) {}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
原始客户端由模块统一关闭,不要在业务代码中重复调用 `close()`。
|
|
423
|
+
|
|
424
|
+
## 12. 兼容性
|
|
425
|
+
|
|
426
|
+
| 组件 | 支持范围 |
|
|
427
|
+
|---|---|
|
|
428
|
+
| NestJS | 10.x、11.x |
|
|
429
|
+
| Node.js | >= 16 |
|
|
430
|
+
| Nacos Node SDK | `nacos` 2.6.x |
|
|
431
|
+
| Nacos Server | 2.x(已对 2.5.3 做真实端到端验证) |
|
|
432
|
+
| Nacos Server 3.x | 不支持 |
|
|
433
|
+
| 传输协议 | Nacos HTTP OpenAPI;不支持 gRPC |
|
|
434
|
+
|
|
435
|
+
`nacos@2.6.x` 没有实现 Nacos 3.x 所需的 gRPC 协议。配置 `transport: 'grpc'` 时插件会立即抛出错误,不会静默回退造成假成功。
|
|
436
|
+
|
|
437
|
+
插件本身不需要 Java。只有在本机运行 Nacos Server 时才需要 Java;NestJS 应用连接远程 Nacos 时只需要 Node.js。
|
|
438
|
+
|
|
439
|
+
## 13. 常见问题
|
|
440
|
+
|
|
441
|
+
### `getServerStatus()` 类型是 Promise
|
|
442
|
+
|
|
443
|
+
必须使用 `await`:
|
|
444
|
+
|
|
445
|
+
```ts
|
|
446
|
+
const status = await this.naming.getServerStatus();
|
|
111
447
|
```
|
|
112
448
|
|
|
113
|
-
|
|
449
|
+
### 鉴权后 Naming 正常但 Config 失败
|
|
450
|
+
|
|
451
|
+
使用顶层 `username/password` 可以同时传给两个客户端,避免重复配置遗漏:
|
|
114
452
|
|
|
115
453
|
```ts
|
|
116
|
-
|
|
117
|
-
const health = await healthIndicator.isHealthy();
|
|
454
|
+
NacosModule.forRoot({ serverAddr, username, password });
|
|
118
455
|
```
|
|
119
456
|
|
|
120
|
-
|
|
457
|
+
### public namespace 应该怎么写
|
|
458
|
+
|
|
459
|
+
省略 `namespace` 或设置为 `public` 都可以。插件会按 Naming 和 Config SDK 的不同要求正确归一化。
|
|
460
|
+
|
|
461
|
+
### 应用无法退出
|
|
462
|
+
|
|
463
|
+
请通过 Nest 的 `app.close()` 或正常进程信号关闭。模块销毁时会注销实例、取消订阅并关闭两个 SDK 客户端。
|
|
464
|
+
|
|
465
|
+
### Nacos 3.x 为什么不能连接
|
|
466
|
+
|
|
467
|
+
当前 Node SDK 没有 Nacos 3.x gRPC 实现。需要 Nacos 3.x 时不能通过修改 `transport` 参数解决,应等待或替换真正支持该协议的 SDK。
|
|
121
468
|
|
|
122
|
-
## 验证
|
|
469
|
+
## 14. 验证
|
|
123
470
|
|
|
124
471
|
```bash
|
|
125
472
|
npm ci
|
|
@@ -127,4 +474,4 @@ npm run build
|
|
|
127
474
|
npm test
|
|
128
475
|
```
|
|
129
476
|
|
|
130
|
-
发布前还应针对真实 Nacos 2.x
|
|
477
|
+
发布前还应针对真实 Nacos 2.x 执行端到端测试,并从服务端接口反查注册、配置发布和删除结果。
|
|
@@ -66,6 +66,19 @@ export interface NacosConfigLoadingOptions {
|
|
|
66
66
|
retry?: NacosRetryOptions;
|
|
67
67
|
}
|
|
68
68
|
export interface NacosModuleOptions {
|
|
69
|
+
/**
|
|
70
|
+
* Shared Nacos address for both Naming and Config clients.
|
|
71
|
+
* Use the nested client options only when their addresses differ.
|
|
72
|
+
*/
|
|
73
|
+
serverAddr?: string | string[];
|
|
74
|
+
/** Shared namespace. Defaults to the public namespace. */
|
|
75
|
+
namespace?: string;
|
|
76
|
+
/** Shared username for both clients. */
|
|
77
|
+
username?: string;
|
|
78
|
+
/** Shared password for both clients. */
|
|
79
|
+
password?: string;
|
|
80
|
+
/** Shared TLS switch for both clients. */
|
|
81
|
+
ssl?: boolean;
|
|
69
82
|
naming?: NacosNamingOptions;
|
|
70
83
|
config?: NacosConfigOptions;
|
|
71
84
|
instances?: NacosInstanceOptions[];
|
|
@@ -73,12 +86,14 @@ export interface NacosModuleOptions {
|
|
|
73
86
|
configLoading?: NacosConfigLoadingOptions;
|
|
74
87
|
retry?: NacosRetryOptions;
|
|
75
88
|
}
|
|
89
|
+
/** A server address string is shorthand for `{ serverAddr }`. */
|
|
90
|
+
export type NacosModuleOptionsInput = NacosModuleOptions | string;
|
|
76
91
|
export interface NacosOptionsFactory {
|
|
77
|
-
createNacosOptions(): Promise<
|
|
92
|
+
createNacosOptions(): Promise<NacosModuleOptionsInput> | NacosModuleOptionsInput;
|
|
78
93
|
}
|
|
79
94
|
export interface NacosModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
80
95
|
name?: string;
|
|
81
|
-
useFactory?: (...args: any[]) => Promise<
|
|
96
|
+
useFactory?: (...args: any[]) => Promise<NacosModuleOptionsInput> | NacosModuleOptionsInput;
|
|
82
97
|
inject?: any[];
|
|
83
98
|
useClass?: Type<NacosOptionsFactory>;
|
|
84
99
|
useExisting?: Type<NacosOptionsFactory> | string | symbol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.interfaces.d.ts","sourceRoot":"","sources":["../src/nacos.interfaces.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nacos.interfaces.d.ts","sourceRoot":"","sources":["../src/nacos.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtD,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AACxE,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;AAE9E,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC3C,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,iEAAiE;AACjE,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,IAAI,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;CAClF;AAED,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;IAC5F,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;CAC3D;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/nacos.module.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DynamicModule } from '@nestjs/common';
|
|
2
|
-
import { NacosModuleAsyncOptions,
|
|
2
|
+
import { NacosModuleAsyncOptions, NacosModuleOptionsInput } from './nacos.interfaces';
|
|
3
3
|
export declare class NacosModule {
|
|
4
|
-
static forRoot(options:
|
|
4
|
+
static forRoot(options: NacosModuleOptionsInput): DynamicModule;
|
|
5
5
|
static forRootAsync(options: NacosModuleAsyncOptions): DynamicModule;
|
|
6
6
|
private static createAsyncOptionsProvider;
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.module.d.ts","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"nacos.module.d.ts","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAc5B,qBACa,WAAW;IACtB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAe/D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAoBpE,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAoB1C"}
|
package/dist/nacos.module.js
CHANGED
|
@@ -27,7 +27,7 @@ let NacosModule = NacosModule_1 = class NacosModule {
|
|
|
27
27
|
module: NacosModule_1,
|
|
28
28
|
global: true,
|
|
29
29
|
providers: [
|
|
30
|
-
{ provide: nacos_constants_1.NACOS_OPTIONS, useValue: options },
|
|
30
|
+
{ provide: nacos_constants_1.NACOS_OPTIONS, useValue: (0, nacos_providers_1.normalizeNacosOptions)(options) },
|
|
31
31
|
...nacos_providers_1.nacosClientProviders,
|
|
32
32
|
nacos_naming_service_1.NacosNamingService,
|
|
33
33
|
nacos_config_service_1.NacosConfigService,
|
|
@@ -59,7 +59,7 @@ let NacosModule = NacosModule_1 = class NacosModule {
|
|
|
59
59
|
if (options.useFactory) {
|
|
60
60
|
return {
|
|
61
61
|
provide: nacos_constants_1.NACOS_OPTIONS,
|
|
62
|
-
useFactory: options.useFactory,
|
|
62
|
+
useFactory: async (...args) => (0, nacos_providers_1.normalizeNacosOptions)(await options.useFactory(...args)),
|
|
63
63
|
inject: options.inject ?? [],
|
|
64
64
|
};
|
|
65
65
|
}
|
|
@@ -69,7 +69,7 @@ let NacosModule = NacosModule_1 = class NacosModule {
|
|
|
69
69
|
}
|
|
70
70
|
return {
|
|
71
71
|
provide: nacos_constants_1.NACOS_OPTIONS,
|
|
72
|
-
useFactory: (factory) => factory.createNacosOptions(),
|
|
72
|
+
useFactory: async (factory) => (0, nacos_providers_1.normalizeNacosOptions)(await factory.createNacosOptions()),
|
|
73
73
|
inject: [factoryToken],
|
|
74
74
|
};
|
|
75
75
|
}
|
package/dist/nacos.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.module.js","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAiE;AACjE,uDAA4F;
|
|
1
|
+
{"version":3,"file":"nacos.module.js","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAiE;AACjE,uDAA4F;AAM5F,uDAAgF;AAChF,iEAA4D;AAC5D,iEAA4D;AAC5D,iDAAsD;AAEtD,MAAM,iBAAiB,GAAG;IACxB,qCAAmB;IACnB,qCAAmB;IACnB,yCAAkB;IAClB,yCAAkB;IAClB,mCAAoB;CACrB,CAAC;AAGK,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,OAAO,CAAC,OAAgC;QAC7C,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,+BAAa,EAAE,QAAQ,EAAE,IAAA,uCAAqB,EAAC,OAAO,CAAC,EAAE;gBACpE,GAAG,sCAAoB;gBACvB,yCAAkB;gBAClB,yCAAkB;gBAClB,mCAAoB;aACrB;YACD,OAAO,EAAE,iBAAiB;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgC;QAClD,MAAM,cAAc,GAAe,OAAO,CAAC,QAAQ;YACjD,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE;gBACT,GAAG,cAAc;gBACjB,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;gBACxC,GAAG,sCAAoB;gBACvB,yCAAkB;gBAClB,yCAAkB;gBAClB,mCAAoB;aACrB;YACD,OAAO,EAAE,iBAAiB;SAC3B,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,0BAA0B,CAAC,OAAgC;QACxE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,+BAAa;gBACtB,UAAU,EAAE,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE,CACnC,IAAA,uCAAqB,EAAC,MAAM,OAAO,CAAC,UAAW,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC7B,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,OAAO,EAAE,+BAAa;YACtB,UAAU,EAAE,KAAK,EAAE,OAA4B,EAAE,EAAE,CACjD,IAAA,uCAAqB,EAAC,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC3D,MAAM,EAAE,CAAC,YAAY,CAAC;SACvB,CAAC;IACJ,CAAC;CACF,CAAA;AAxDY,kCAAW;sBAAX,WAAW;IADvB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,WAAW,CAwDvB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Provider } from '@nestjs/common';
|
|
2
2
|
import { NacosConfigClient, NacosNamingClient } from 'nacos';
|
|
3
|
-
import { NacosModuleOptions } from './nacos.interfaces';
|
|
3
|
+
import { NacosModuleOptions, NacosModuleOptionsInput } from './nacos.interfaces';
|
|
4
4
|
export declare function createNamingClient(options: NacosModuleOptions['naming']): NacosNamingClient | null;
|
|
5
5
|
export declare function createConfigClient(options: NacosModuleOptions['config']): NacosConfigClient | null;
|
|
6
|
+
/** Expands the simple shared connection fields into SDK-specific options. */
|
|
7
|
+
export declare function normalizeNacosOptions(input: NacosModuleOptionsInput): NacosModuleOptions;
|
|
6
8
|
export declare const nacosClientProviders: Provider[];
|
|
7
9
|
//# sourceMappingURL=nacos.providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.providers.d.ts","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,
|
|
1
|
+
{"version":3,"file":"nacos.providers.d.ts","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAW5B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAclG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAelG;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAwBxF;AAUD,eAAO,MAAM,oBAAoB,EAAE,QAAQ,EAW1C,CAAC"}
|
package/dist/nacos.providers.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.nacosClientProviders = void 0;
|
|
4
4
|
exports.createNamingClient = createNamingClient;
|
|
5
5
|
exports.createConfigClient = createConfigClient;
|
|
6
|
+
exports.normalizeNacosOptions = normalizeNacosOptions;
|
|
6
7
|
const common_1 = require("@nestjs/common");
|
|
7
8
|
const nacos_1 = require("nacos");
|
|
8
9
|
const nacos_constants_1 = require("./nacos.constants");
|
|
@@ -47,6 +48,30 @@ function createConfigClient(options) {
|
|
|
47
48
|
signatureRegionId: options.signatureRegionId,
|
|
48
49
|
});
|
|
49
50
|
}
|
|
51
|
+
/** Expands the simple shared connection fields into SDK-specific options. */
|
|
52
|
+
function normalizeNacosOptions(input) {
|
|
53
|
+
const options = typeof input === 'string'
|
|
54
|
+
? { serverAddr: input }
|
|
55
|
+
: input;
|
|
56
|
+
const sharedAddress = options.serverAddr;
|
|
57
|
+
const shared = {
|
|
58
|
+
namespace: options.namespace,
|
|
59
|
+
username: options.username,
|
|
60
|
+
password: options.password,
|
|
61
|
+
ssl: options.ssl,
|
|
62
|
+
};
|
|
63
|
+
const naming = options.naming
|
|
64
|
+
? { ...shared, ...options.naming }
|
|
65
|
+
: sharedAddress
|
|
66
|
+
? { ...shared, serverList: sharedAddress }
|
|
67
|
+
: undefined;
|
|
68
|
+
const config = options.config
|
|
69
|
+
? { ...shared, ...options.config }
|
|
70
|
+
: sharedAddress
|
|
71
|
+
? { ...shared, serverAddr: sharedAddress }
|
|
72
|
+
: undefined;
|
|
73
|
+
return { ...options, naming, config };
|
|
74
|
+
}
|
|
50
75
|
function assertSupportedTransport(transport) {
|
|
51
76
|
if (transport === 'grpc') {
|
|
52
77
|
throw new Error('transport "grpc" is not supported: nacos@2.6.x only implements the Nacos HTTP OpenAPI');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.providers.js","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"nacos.providers.js","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danqiusheng/nest-nacos",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "NestJS Nacos 2.x configuration and service-discovery integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
"build": "rimraf dist && tsc",
|
|
16
16
|
"test": "npm run test:unit",
|
|
17
17
|
"test:unit": "ts-node test/unit.ts",
|
|
18
|
+
"test:simple-e2e": "ts-node test/simple-options.e2e.ts",
|
|
19
|
+
"typecheck:example": "tsc --project tsconfig.example.json --noEmit",
|
|
18
20
|
"start:example": "ts-node example/app.module.ts",
|
|
19
|
-
"prepublishOnly": "npm run build && npm test"
|
|
21
|
+
"prepublishOnly": "npm run build && npm test && npm run typecheck:example"
|
|
20
22
|
},
|
|
21
23
|
"dependencies": {
|
|
22
24
|
"js-yaml": "^4.3.0",
|