@@ -27,45 +27,39 @@ import {
27
27
IIntervalTime
28
28
} from './types'
29
29
30
- function mergeConfig < T extends IFetchBaseConifg > (
31
- baseConfig : IXCrawlBaseConifg ,
32
- config : T
33
- ) : IFetchBaseConifg & T {
34
- const {
35
- baseUrl,
36
- timeout : baseTimeout ,
37
- intervalTime : baseIntervalTime
38
- } = baseConfig
39
- const { requestConifg, intervalTime } = config
40
-
41
- const requestConifgArr = isArray ( requestConifg )
42
- ? requestConifg
43
- : [ requestConifg ]
44
-
45
- for ( const requestItem of requestConifgArr ) {
46
- const { url, timeout } = requestItem
47
-
48
- if ( ! isUndefined ( baseUrl ) ) {
49
- requestItem . url = baseUrl + url
50
- }
30
+ export default class XCrawl {
31
+ private readonly baseConfig : IXCrawlBaseConifg
51
32
52
- if ( isUndefined ( timeout ) && ! isUndefined ( baseTimeout ) ) {
53
- requestItem . timeout = baseTimeout
54
- }
33
+ constructor ( baseConfig : IXCrawlBaseConifg = { } ) {
34
+ this . baseConfig = baseConfig
55
35
}
56
36
57
- if ( isUndefined ( intervalTime ) && ! isUndefined ( baseIntervalTime ) ) {
58
- config . intervalTime = baseIntervalTime
59
- }
37
+ private mergeConfig < T extends IFetchBaseConifg > ( rawConfig : T ) : T {
38
+ const baseConfig = this . baseConfig
39
+ const newConfig : T = structuredClone ( rawConfig )
60
40
61
- return config
62
- }
41
+ // 1.处理 requestConifg
42
+ const requestConifgArr = isArray ( newConfig . requestConifg )
43
+ ? newConfig . requestConifg
44
+ : [ newConfig . requestConifg ]
45
+ for ( const requestItem of requestConifgArr ) {
46
+ const { url, timeout } = requestItem
63
47
64
- export default class XCrawl {
65
- private readonly baseConfig : IXCrawlBaseConifg
48
+ if ( ! isUndefined ( baseConfig . baseUrl ) ) {
49
+ requestItem . url = baseConfig . baseUrl + url
50
+ }
66
51
67
- constructor ( baseConfig : IXCrawlBaseConifg = { } ) {
68
- this . baseConfig = baseConfig
52
+ if ( isUndefined ( timeout ) ) {
53
+ requestItem . timeout = baseConfig . timeout
54
+ }
55
+ }
56
+
57
+ // 2.处理 intervalTime
58
+ if ( isUndefined ( newConfig . intervalTime ) ) {
59
+ newConfig . intervalTime = baseConfig . intervalTime
60
+ }
61
+
62
+ return newConfig
69
63
}
70
64
71
65
private async useBatchRequestByMode (
@@ -87,12 +81,8 @@ export default class XCrawl {
87
81
}
88
82
89
83
async fetchHTML ( config : IFetchHTMLConfig ) : Promise < IFetchHTML > {
90
- const rawRequestConifg : IFetchHTMLConfig = isString ( config )
91
- ? { url : config }
92
- : config
93
-
94
- const { requestConifg } = mergeConfig ( this . baseConfig , {
95
- requestConifg : rawRequestConifg
84
+ const { requestConifg } = this . mergeConfig ( {
85
+ requestConifg : isString ( config ) ? { url : config } : config
96
86
} )
97
87
98
88
const requestRes = await request ( requestConifg )
@@ -110,7 +100,7 @@ export default class XCrawl {
110
100
}
111
101
112
102
async fetchData < T = any > ( config : IFetchDataConfig ) : Promise < IFetchCommon < T > > {
113
- const { requestConifg, intervalTime } = mergeConfig ( this . baseConfig , config )
103
+ const { requestConifg, intervalTime } = this . mergeConfig ( config )
114
104
115
105
const requestRes = await this . useBatchRequestByMode (
116
106
requestConifg ,
@@ -134,10 +124,8 @@ export default class XCrawl {
134
124
}
135
125
136
126
async fetchFile ( config : IFetchFileConfig ) : Promise < IFetchCommon < IFileInfo > > {
137
- const { requestConifg, intervalTime, fileConfig } = mergeConfig (
138
- this . baseConfig ,
139
- config
140
- )
127
+ const { requestConifg, intervalTime, fileConfig } = this . mergeConfig ( config )
128
+
141
129
const requestRes = await this . useBatchRequestByMode (
142
130
requestConifg ,
143
131
intervalTime
@@ -170,7 +158,7 @@ export default class XCrawl {
170
158
171
159
const saveTotal = requestRes . length
172
160
const success = container . length
173
- const error = requestRes . length - container . length
161
+ const error = saveTotal - success
174
162
log (
175
163
`saveTotal: ${ logNumber ( saveTotal ) } , success: ${ logSuccess (
176
164
success
0 commit comments