Commit 39a13350 by hometown

feat: axios time out

parent 9b76c374
{ {
// Visuals // Visuals
"workbench.colorTheme": "Vitesse Light", "workbench.colorTheme": "Vitesse Dark",
"workbench.editor.tabCloseButton": "left", "workbench.editor.tabCloseButton": "left",
"workbench.fontAliasing": "antialiased", "workbench.fontAliasing": "antialiased",
"workbench.iconTheme": "file-icons", "workbench.iconTheme": "file-icons",
......
FROM node:latest
# 设置时区
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /app
WORKDIR /app
COPY package.json pnpm-lock.yaml /app/
RUN npm install -g pnpm
RUN pnpm install
COPY . /app/
EXPOSE 3000
CMD ["pnpm", "start:prod"]
version: "3.0"
services:
app:
build: # 根据Dockerfile构建镜像
context: .
dockerfile: Dockerfile
ports:
- 3333:3333
...@@ -65,6 +65,8 @@ ...@@ -65,6 +65,8 @@
"@types/supertest": "^2.0.10", "@types/supertest": "^2.0.10",
"@typescript-eslint/eslint-plugin": "^4.9.1", "@typescript-eslint/eslint-plugin": "^4.9.1",
"@typescript-eslint/parser": "^4.9.1", "@typescript-eslint/parser": "^4.9.1",
"axios-retry": "^4.0.0",
"body-parser": "^1.20.2",
"eslint": "^7.15.0", "eslint": "^7.15.0",
"eslint-config-prettier": "^7.0.0", "eslint-config-prettier": "^7.0.0",
"eslint-plugin-import": "^2.22.1", "eslint-plugin-import": "^2.22.1",
...@@ -75,7 +77,7 @@ ...@@ -75,7 +77,7 @@
"ts-loader": "^8.0.11", "ts-loader": "^8.0.11",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"tsconfig-paths": "^3.9.0", "tsconfig-paths": "^3.9.0",
"typescript": "^4.1.2" "typescript": "^5.3.3"
}, },
"jest": { "jest": {
"moduleFileExtensions": [ "moduleFileExtensions": [
......
...@@ -14,7 +14,7 @@ const bodyParser = require('body-parser'); ...@@ -14,7 +14,7 @@ const bodyParser = require('body-parser');
require('body-parser-xml')(bodyParser); require('body-parser-xml')(bodyParser);
const PORT = 3333; const PORT = 3333;
const PREFIX = 'api' const PREFIX = 'chh-api'
const SWAGGER_V1 = `${PREFIX}/v1/swagger` const SWAGGER_V1 = `${PREFIX}/v1/swagger`
async function bootstrap() { async function bootstrap() {
...@@ -43,7 +43,7 @@ async function bootstrap() { ...@@ -43,7 +43,7 @@ async function bootstrap() {
); );
app.use(bodyParser.xml({ app.use(bodyParser.xml({
limit: '1MB', // 拒绝大于1 MB的有效负载 limit: '1000MB', // 拒绝大于1 MB的有效负载
xmlParseOptions: { xmlParseOptions: {
normalize: true, // 在文本节点内修剪空格 normalize: true, // 在文本节点内修剪空格
normalizeTags: true, // 将标签转换为小写 normalizeTags: true, // 将标签转换为小写
......
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import axios from 'axios'; import axios from 'axios';
import retry from 'axios-retry'
import type { ErnieBotAccessToken, ErnieBotChatResponse } from './types'; import type { ErnieBotAccessToken, ErnieBotChatResponse } from './types';
import { ChatQueryDto } from './dto/chatQuery.dto'; import { ChatQueryDto } from './dto/chatQuery.dto';
const axiosTimeOut = 1000 * 60 * 5
retry(axios, {
retries: 3,
retryDelay: retry.exponentialDelay
})
@Injectable() @Injectable()
export class ChatService { export class ChatService {
async query(body: ChatQueryDto) { async query(body: ChatQueryDto) {
...@@ -17,14 +25,17 @@ export class ChatService { ...@@ -17,14 +25,17 @@ export class ChatService {
verbose: true, verbose: true,
history, history,
}) })
const res = await axios<ErnieBotChatResponse>(url, { method: 'post', headers: { 'Content-Type': 'application/json' }, data }) const res = await axios<ErnieBotChatResponse>(url, { method: 'post', timeout: axiosTimeOut, headers: { 'Content-Type': 'application/json' }, data })
return res.data.result || res.data.error_msg return res.data.result || res.data.error_msg
} }
private async getAccessToken() { private async getAccessToken() {
const AK = 'mXQIDW260qBbNgQRF0p1YFgn' const AK = 'mXQIDW260qBbNgQRF0p1YFgn'
const SK = 'hzriOtzGiDkd1S0wFwiyr7WlarfufTdi' const SK = 'hzriOtzGiDkd1S0wFwiyr7WlarfufTdi'
const res = await axios.post<ErnieBotAccessToken>(`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${AK}&client_secret=${SK}`) const res = await axios<ErnieBotAccessToken>(`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${AK}&client_secret=${SK}`, {
method: 'post',
timeout: axiosTimeOut
})
return res.data.access_token return res.data.access_token
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment