diff --git a/packages/app-console/src/views/storage/websites.vue b/packages/app-console/src/views/storage/websites.vue index 9f0bfe5e4b..e8dd6f6286 100644 --- a/packages/app-console/src/views/storage/websites.vue +++ b/packages/app-console/src/views/storage/websites.vue @@ -168,6 +168,7 @@ export default { this.websites = ret.data.map(item => { item.created_at = dayjs(item.created_at).format('YYYY-MM-DD HH:mm:ss') item.updated_at = dayjs(item.updated_at).format('YYYY-MM-DD HH:mm:ss') + item.domain = item.domain.join(',') return item }) this.loading = false @@ -250,6 +251,10 @@ export default { return showError('解析错误,请使用正确的 CNAME 解析值') } + if(ret.code === 'ALREADY_EXISTED') { + return showError('该域名已经被绑定') + } + this.$notify({ type: 'success', title: '操作成功', diff --git a/packages/system-server/src/handler/website/domain-bind.ts b/packages/system-server/src/handler/website/domain-bind.ts index fa4f5720b0..900ceab83b 100644 --- a/packages/system-server/src/handler/website/domain-bind.ts +++ b/packages/system-server/src/handler/website/domain-bind.ts @@ -6,8 +6,7 @@ import { CONST_DICTS } from "../../constants" import { checkPermission } from "../../support/permission" import { IApplicationData } from "../../support/application" import { DatabaseAgent } from "../../db" -import { logger } from "../../support/logger" -// import { handleCheckDomain } from "./domain-check" + /** * handle bind a domain to a website @@ -45,7 +44,7 @@ export async function handleBindDomain(req: Request, res: Response) { } // check domain is available - const resolver = new dns.promises.Resolver({ timeout: 3000, tries: 2 }) + const resolver = new dns.promises.Resolver({ timeout: 3000, tries: 1 }) const result = await resolver.resolveCname(domain as string).catch(() => { }) if (!result) { return res.send({ code: 'DOMAIN_NOT_RESOLVEABLE', error: 'domain is not resolveable' }) @@ -59,6 +58,7 @@ export async function handleBindDomain(req: Request, res: Response) { const existedDomain = await db .collection(CN_WEBSITE_HOSTING) .countDocuments({ domain, status: { $ne: "deleted" } }) + if (existedDomain) { return res.send({ code: 'ALREADY_EXISTED', error: "domain already binded" }) } @@ -66,7 +66,10 @@ export async function handleBindDomain(req: Request, res: Response) { // bind const r = await db.collection(CN_WEBSITE_HOSTING).updateOne( { _id: new ObjectId(website_id), appid: app.appid }, - { $set: { domain, state: "pending", updated_at: new Date() } } + { + $set: { state: "pending", updated_at: new Date() }, + $push: { domain: domain } + } ) return res.send({ data: r.modifiedCount }) diff --git a/packages/system-server/src/handler/website/website-create.ts b/packages/system-server/src/handler/website/website-create.ts index 6b67970039..aa7d2752fd 100644 --- a/packages/system-server/src/handler/website/website-create.ts +++ b/packages/system-server/src/handler/website/website-create.ts @@ -55,7 +55,7 @@ export async function handleCreateWebsite(req: Request, res: Response) { label, bucket_name: bucket, appid: app.appid, - domain: null, + domain: [] as string[], cname, status: 'enabled', // 'enabled' | 'disabled' | 'deleted' , the logic status of website state: 'pending', // 'created' | 'deleted' | 'pending', the real state of website