Compare commits

...

20 Commits

Author SHA1 Message Date
Harry Chen 8a5568de77 v2.6.0 2023-12-14 10:43:15 +08:00
Bob 57cd21060b
chore: nacos-naming add more types (#105)
Co-authored-by: Harry Chen <czy88840616@gmail.com>
2023-12-14 10:41:52 +08:00
Nolan Zhang 7fa34ff6a6
chore: add Hosts typings (#97)
I have deployed NACOS version 2.1.1. Has the type changed here because of the version upgrade? I have fixed it
2023-12-13 19:56:09 +08:00
Marc SUN 22c0e57947
chore: add nacos auth supportt typings (#114)
* Update index.d.ts

add nacos auth support

* Update interface.ts

add nacos auth support
2023-12-13 19:54:50 +08:00
陈浩 Nineteen cdea9a26b1
chore: support nacos-sdk-nodejs(2.5.0) example and add auth example (#100) 2023-12-13 19:52:01 +08:00
唯然 50ac48e026
chore: update pkg.license => Apache-2.0 (#101)
rome reports "✖ Unknown license Apache".

refs: https://rome.tools/
2023-03-10 11:23:25 +08:00
Harry Chen 3c6840bdd7 v2.5.1 2022-12-08 16:14:07 +08:00
Jack Hu 4c9af68899
fix: no retry with dns.NOTFOUND (#102)
Co-authored-by: hujingkang <hujingkang@joyy.com>
2022-12-08 16:04:08 +08:00
Harry Chen cc6667c5b1 v2.5.0 2022-08-22 00:05:23 +08:00
Darcy d6ee163a36
fix: comparing the host information using an unstable JSON string (#95) 2022-08-22 00:03:21 +08:00
Harry Chen 41e3965870 v2.4.2 2022-08-09 19:35:21 +08:00
Harry Chen a3feb781a7 chore: update 2022-08-09 19:33:46 +08:00
恒遥 910f7e4bfe
fix: ignore empty hosts array (#94)
Co-authored-by: hengyao.zhy <hengyao.zhy@antgroup.com>
2022-08-09 19:30:03 +08:00
yanlinly 7f1870778e
Update README.md
update ding group info
2022-06-08 17:25:34 +08:00
Harry Chen d044e6cef4 v2.4.1 2022-05-09 14:40:09 +08:00
Evanhahaha 005134d725
feat: config add appName (#87)
* feat: clientOptions增加endPoint查询的url参数选项

* feat: add example of endPointQueryParam

* fixed query param example

* feat: 增加appName可配置

* fixed merge conflict

Co-authored-by: 黑糖 <heitang.zlw@alibaba-inc.com>
2022-05-09 14:38:56 +08:00
Harry Chen e3cb1d5955 v2.4.0 2022-05-05 20:15:14 +08:00
Evanhahaha 6df7ece0a8 feat: clientOptions add endPoint url query params (#84)
Co-authored-by: 黑糖 <heitang.zlw@alibaba-inc.com>
2022-05-05 20:15:14 +08:00
Harry Chen 27a8fa7651 v2.3.1 2022-05-05 20:15:14 +08:00
Harry Chen a3f33bd901 fix: missing typings 2022-05-05 20:15:14 +08:00
16 changed files with 95 additions and 18 deletions

View File

@ -177,6 +177,10 @@ Please let us know how can we help. Do check out [issues](https://github.com/nac
PR is welcome.
nacos-sdk-nodejs ding group 44654232
![image](https://user-images.githubusercontent.com/17695352/172582005-c661e2a0-49fa-425c-bf99-785bb7cd4dc1.png)
## License
[Apache License V2](LICENSE)

View File

@ -3,8 +3,11 @@
const NacosConfigClient = require('nacos').NacosConfigClient;
const configClient = new NacosConfigClient({
serverAddr: '106.14.43.196:8848',
serverAddr: 'aliyun.nacos.net:80',
namespace: '',
// 如果nacos开启了认证鉴权需要在此处填写用户名密码
// username: 'xxx',
// password: 'xxx'
});
function sleep(time){
@ -18,7 +21,7 @@ function sleep(time){
(async () => {
await configClient.ready();
const dataId = 'nacos.test.1';
const dataId = 'nacos.test.22';
const group = 'DEFAULT_GROUP';
const str = `example_test_${Math.random()}_${Date.now()}`;

View File

@ -2,6 +2,6 @@
"name": "nacos-example",
"version": "1.0.0",
"dependencies": {
"nacos": "^1.0.0"
"nacos": "^2.5.0"
}
}

View File

@ -16,5 +16,5 @@
]
}
},
"version": "2.3.0"
"version": "2.6.0"
}

View File

@ -13,7 +13,7 @@
"ci": "npm run cov",
"build": "lerna run build && cp ./README.md ./packages/nacos/README.md"
},
"license": "Apache",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/nacos-group/nacos-sdk-nodejs/issues"
},

View File

@ -1,6 +1,6 @@
{
"name": "nacos-config",
"version": "2.3.0",
"version": "2.6.0",
"description": "nacos config client",
"keywords": [
"nacos-config",

View File

@ -361,7 +361,8 @@ export class ClientWorker extends Base implements IClientWorker {
group,
content,
tenant: this.namespace,
type
type,
appName: this.appName
},
});
return true;

View File

@ -19,6 +19,7 @@ import { ClientOptionKeys, IConfiguration, IServerListManager } from './interfac
import * as urllib from 'urllib';
import * as crypto from 'crypto';
import { encodingParams, transformGBKToUTF8 } from './utils';
import * as dns from 'dns';
export class HttpAgent {
@ -90,6 +91,10 @@ export class HttpAgent {
return this.configuration.get(ClientOptionKeys.IDENTITY_VALUE);
}
get endpointQueryParams() {
return this.configuration.get(ClientOptionKeys.ENDPOINT_QUERY_PARAMS)
}
get decodeRes() {
return this.configuration.get(ClientOptionKeys.DECODE_RES);
}
@ -191,6 +196,9 @@ export class HttpAgent {
break;
}
} catch (err) {
if (err.code === dns.NOTFOUND) {
throw err;
}
err.url = `${method} ${url}`;
err.data = data;
err.headers = headers;

View File

@ -262,9 +262,12 @@ export interface ClientOptions {
serverAddr?: string; // 用于直连,包含端口
unit?: string; // 内部单元化用
nameServerAddr?: string; // 老的兼容参数,逐步废弃,同 endpoint
username?: string; // 认证的用户名
password?: string; // 认证的密码
cacheDir?: string; // 缓存文件的路径
identityKey?: string; // Identity Key
identityValue?: string; // Identity Value
endpointQueryParams?: string; // endPoint 查询参数 e.g: param_1=1&param_2=2
decodeRes?: (res: any, method?: string, encoding?: string) => any
}
@ -292,6 +295,7 @@ export enum ClientOptionKeys {
IDENTITY_KEY = 'identityKey',
IDENTITY_VALUE = 'identityValue',
DECODE_RES = 'decodeRes',
ENDPOINT_QUERY_PARAMS = 'endpointQueryParams'
}
export interface IConfiguration {

View File

@ -108,6 +108,10 @@ export class ServerListManager extends Base implements IServerListManager {
return this.configuration.get(ClientOptionKeys.CLUSTER_NAME) || 'serverlist';
}
get endpointQueryParams() {
return this.configuration.get(ClientOptionKeys.ENDPOINT_QUERY_PARAMS)
}
get requestTimeout(): number {
return this.configuration.get(ClientOptionKeys.REQUEST_TIMEOUT);
}
@ -226,7 +230,8 @@ export class ServerListManager extends Base implements IServerListManager {
// 获取请求 url
protected getRequestUrl(unit) {
return `http://${this.nameServerAddr}/${this.contextPath}/${this.clusterName}`;
const endpointQueryParams = !!this.endpointQueryParams ? `?${this.endpointQueryParams}` : '';
return `http://${this.nameServerAddr}/${this.contextPath}/${this.clusterName}${endpointQueryParams}`;
}
/**

View File

@ -3,14 +3,35 @@
* Create Time: 2021/8/20 9:12
*/
interface Instance {
instanceId: string,
ip: string, //IP of instance
port: number, //Port of instance
healthy: boolean,
enabled: boolean,
serviceName?: string,
weight?: number,
ephemeral?: boolean,
clusterName?: string
}
type Hosts = string[];
export interface Host {
instanceId: string;
ip: string;
port: number;
weight: number;
healthy: boolean;
enabled: boolean;
ephemeral: boolean;
clusterName: string;
serviceName: string;
metadata: any;
instanceHeartBeatInterval: number;
instanceIdGenerator: string;
instanceHeartBeatTimeOut: number;
ipDeleteTimeout: number;
}
type Hosts = Host[];
interface SubscribeInfo {
serviceName: string,
@ -18,11 +39,22 @@ interface SubscribeInfo {
clusters?: string
}
interface NacosNamingClientConfig {
logger: typeof console,
serverList: string | string[],
namespace?: string,
username?: string,
password?: string,
endpoint?: string,
vipSrvRefInterMillis?: number,
ssl?: boolean
}
/**
* Nacos服务发现组件
*/
export class NacosNamingClient {
constructor (config: { logger: typeof console, serverList: string | string[], namespace?: string })
constructor (config: NacosNamingClientConfig);
ready: () => Promise<void>;
// Register an instance to service
@ -44,6 +76,14 @@ export class NacosNamingClient {
clusters?: string, //Cluster names
subscribe?: boolean //whether subscribe the service, default is true
) => Promise<Hosts>;
// Select instance list of service.
selectInstances: (
serviceName: string,
groupName?: string,
clusters?: string,
healthy?: boolean,
subscribe?: boolean
) => Promise<Hosts>;
// Get the status of nacos server, 'UP' or 'DOWN'.
getServerStatus: () => 'UP' | 'DOWN';
subscribe: (
@ -54,4 +94,4 @@ export class NacosNamingClient {
info: SubscribeInfo | string, //service info, if type is string, it's the serviceName
listener: (host: Hosts) => void //the listener function
) => void;
}
}

View File

@ -22,6 +22,7 @@ const Base = require('sdk-base');
const Constants = require('../const');
const ServiceInfo = require('./service_info');
const PushReceiver = require('./push_receiver');
const equals = require('equals');
class HostReactor extends Base {
constructor(options = {}) {
@ -92,7 +93,7 @@ class HostReactor extends Base {
const key = host.ip + ':' + host.port;
newHostMap.set(key, host);
if (oldHostMap.has(key) && JSON.stringify(host) !== JSON.stringify(oldHostMap.get(key))) {
if (oldHostMap.has(key) && !equals(host, oldHostMap.get(key))) {
modHosts.push(host);
continue;
}

View File

@ -40,7 +40,12 @@ class ServiceInfo {
}
get isValid() {
return !!this.hosts;
const valid = !!this.hosts;
// 如果 this.hosts 是空数组要返回 false
if (valid && Array.isArray(this.hosts)) {
return this.hosts.length > 0;
}
return valid;
}
getKey() {

View File

@ -1,11 +1,12 @@
{
"name": "nacos-naming",
"version": "2.3.0",
"version": "2.6.0",
"description": "nacos (https://nacos.io/en-us/) nodejs sdk",
"main": "index.js",
"files": [
"lib",
"index.js"
"index.js",
"index.d.ts"
],
"scripts": {
"autod": "autod",
@ -42,6 +43,7 @@
},
"dependencies": {
"address": "^1.1.0",
"equals": "^1.0.5",
"mz-modules": "^2.1.0",
"sdk-base": "^3.6.0",
"urllib": "^2.33.3",

View File

@ -177,6 +177,10 @@ Please let us know how can we help. Do check out [issues](https://github.com/nac
PR is welcome.
nacos-sdk-nodejs ding group 44654232
![image](https://user-images.githubusercontent.com/17695352/172582005-c661e2a0-49fa-425c-bf99-785bb7cd4dc1.png)
## License
[Apache License V2](LICENSE)

View File

@ -1,6 +1,6 @@
{
"name": "nacos",
"version": "2.3.0",
"version": "2.6.0",
"description": "nacos client main package",
"keywords": [
"nacos",
@ -12,8 +12,8 @@
"main": "dist/index.js",
"author": "czy88840616@gmail.com",
"dependencies": {
"nacos-config": "^2.3.0",
"nacos-naming": "^2.3.0"
"nacos-config": "^2.6.0",
"nacos-naming": "^2.6.0"
},
"devDependencies": {
"@types/mocha": "^5.2.5",