Skip to content

Commit b989fdf

Browse files
committed
Iconv
1 parent 780d682 commit b989fdf

File tree

4 files changed

+67
-12
lines changed

4 files changed

+67
-12
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"colors": "^1.1.2",
4141
"cron": "^1.3.0",
4242
"humanize-number": "^0.0.2",
43+
"iconv": "^2.3.0",
4344
"kcors": "^2.2.1",
4445
"koa": "^2.4.1",
4546
"koa-bodyparser": "^4.2.0",

shrinkwrap.yaml

+16
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ dependencies:
88
colors: 1.1.2
99
cron: 1.3.0
1010
humanize-number: 0.0.2
11+
iconv: 2.3.0
1112
kcors: 2.2.1
1213
koa: 2.5.0
1314
koa-bodyparser: 4.2.0
@@ -1460,6 +1461,15 @@ packages:
14601461
resolution:
14611462
integrity: sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=
14621463
tarball: 'http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz'
1464+
/iconv/2.3.0:
1465+
dependencies:
1466+
nan: 2.9.2
1467+
dev: false
1468+
engines:
1469+
node: '>=0.8.0'
1470+
resolution:
1471+
integrity: sha1-lzmIfCvUktml4jbdNmfFNYYBIBs=
1472+
tarball: 'http://registry.npm.taobao.org/iconv/download/iconv-2.3.0.tgz'
14631473
/ienoopen/1.0.0:
14641474
dev: false
14651475
resolution:
@@ -2045,6 +2055,11 @@ packages:
20452055
resolution:
20462056
integrity: sha1-O3oNJiA910s6nfTJz7gnsvuQfmQ=
20472057
tarball: 'http://registry.npm.taobao.org/named-placeholders/download/named-placeholders-1.1.1.tgz'
2058+
/nan/2.9.2:
2059+
dev: false
2060+
resolution:
2061+
integrity: sha1-9WTXX1+PNqbZRWzKemxP5IireGY=
2062+
tarball: 'http://registry.npm.taobao.org/nan/download/nan-2.9.2.tgz'
20482063
/natural-compare/1.4.0:
20492064
dev: true
20502065
resolution:
@@ -3204,6 +3219,7 @@ specifiers:
32043219
eslint-plugin-promise: ^3.6.0
32053220
eslint-plugin-standard: ^3.0.1
32063221
humanize-number: ^0.0.2
3222+
iconv: ^2.3.0
32073223
kcors: ^2.2.1
32083224
koa: ^2.4.1
32093225
koa-bodyparser: ^4.2.0

src/controllers/hitokoto.js

+49-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Import necessary packages
2+
const Iconv = require('iconv').Iconv
23
const path = require('path')
34
const SrcDir = path.join('../../', './src/')
45
const db = require(SrcDir + 'db')
@@ -25,23 +26,41 @@ async function hitokoto (ctx, next) {
2526
}
2627
// CheckEncoding
2728
const encode = ctx.query.encode
29+
let response
30+
let js = false
2831
switch (encode) {
2932
case 'json':
30-
ctx.body = ret
33+
response = Buffer.from(ret)
3134
break
3235
case 'text':
33-
ctx.body = ret.text
36+
response = Buffer.from(ret.text)
3437
break
3538
case 'js':
3639
const select = ctx.query.select ? ctx.query.select : '.hitokoto'
37-
ctx.set('charset', 'utf-8')
38-
ctx.set('Content-Type', 'text/javascript; charset=utf-8')
39-
ctx.body = `(function hitokoto(){var hitokoto="${ret.hitokoto}";var dom=document.querySelector('${select}');Array.isArray(dom)?dom[0].innerText=hitokoto:dom.innerText=hitokoto;})()`
40+
// ctx.set('Content-Type', 'text/javascript; charset=utf-8')
41+
js = true
42+
response = Buffer.from(`(function hitokoto(){var hitokoto="${ret.hitokoto}";var dom=document.querySelector('${select}');Array.isArray(dom)?dom[0].innerText=hitokoto:dom.innerText=hitokoto;})()`)
4043
break
4144
default:
42-
ctx.body = ret
45+
response = Buffer.from(ret)
4346
break
4447
}
48+
if (ctx.query && ctx.query.charset && ctx.query.charset.toLocaleLowerCase() === 'gbk') {
49+
if (js) {
50+
ctx.set('Content-Type', 'text/javascript; charset=gbk')
51+
} else {
52+
ctx.set('Content-Type', 'application/json; charset=gbk')
53+
}
54+
const iconv = new Iconv('UTF-8', 'GBK')
55+
ctx.body = iconv.convert(response)
56+
} else {
57+
if (js) {
58+
ctx.set('Content-Type', 'text/javascript; charset=utf-8')
59+
} else {
60+
ctx.set('Content-Type', 'application/json; charset=utf-8')
61+
}
62+
ctx.body = response
63+
}
4564
} else {
4665
// Not Params or just has callback
4766
const ret = await hitokoto.findOne({
@@ -51,22 +70,41 @@ async function hitokoto (ctx, next) {
5170

5271
// CheckEncoding
5372
const encode = ctx.query.encode
73+
let response
74+
let js = false
5475
switch (encode) {
5576
case 'json':
56-
ctx.body = ret
77+
response = Buffer.from(ret)
5778
break
5879
case 'text':
59-
ctx.body = ret.text
80+
response = Buffer.from(ret.text)
6081
break
6182
case 'js':
6283
const select = ctx.query.select ? ctx.query.select : '.hitokoto'
63-
ctx.set('Content-Type', 'text/javascript; charset=utf-8')
64-
ctx.body = `(function hitokoto(){var hitokoto="${ret.hitokoto}";var dom=document.querySelector('${select}');if(!dom){console.error("请输入正确的选择器值");}Array.isArray(dom)?dom[0].innerText=hitokoto:dom.innerText=hitokoto;})()`
84+
// ctx.set('Content-Type', 'text/javascript; charset=utf-8')
85+
js = true
86+
response = Buffer.from(`(function hitokoto(){var hitokoto="${ret.hitokoto}";var dom=document.querySelector('${select}');Array.isArray(dom)?dom[0].innerText=hitokoto:dom.innerText=hitokoto;})()`)
6587
break
6688
default:
67-
ctx.body = ret
89+
response = Buffer.from(ret)
6890
break
6991
}
92+
if (ctx.query && ctx.query.charset && ctx.query.charset.toLocaleLowerCase() === 'gbk') {
93+
if (js) {
94+
ctx.set('Content-Type', 'text/javascript; charset=gbk')
95+
} else {
96+
ctx.set('Content-Type', 'application/json; charset=gbk')
97+
}
98+
const iconv = new Iconv('UTF-8', 'GBK')
99+
ctx.body = iconv.convert(response)
100+
} else {
101+
if (js) {
102+
ctx.set('Content-Type', 'text/javascript; charset=utf-8')
103+
} else {
104+
ctx.set('Content-Type', 'application/json; charset=utf-8')
105+
}
106+
ctx.body = response
107+
}
70108
}
71109
}
72110
module.exports = hitokoto

update.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ bail() {
1111
}
1212
exec_cmd_nobail() {
1313
echo "+ $1"
14-
bash -c "$1"
14+
sh -c "$1"
1515
}
1616

1717
exec_cmd() {

0 commit comments

Comments
 (0)