diff --git a/packages/plugins/@nocobase/plugin-action-export/src/server/__tests__/export-to-xlsx.test.ts b/packages/plugins/@nocobase/plugin-action-export/src/server/__tests__/export-to-xlsx.test.ts index 1068180ff5..9887d35763 100644 --- a/packages/plugins/@nocobase/plugin-action-export/src/server/__tests__/export-to-xlsx.test.ts +++ b/packages/plugins/@nocobase/plugin-action-export/src/server/__tests__/export-to-xlsx.test.ts @@ -324,6 +324,48 @@ describe('export to xlsx', () => { await app.destroy(); }); + it('should throw error when export field not exists', async () => { + const Post = app.db.collection({ + name: 'posts', + fields: [ + { + name: 'title', + type: 'string', + }, + ], + }); + + await app.db.sync(); + + await Post.repository.create({ + values: { + title: 'some_title', + json: { + a: { + b: 'c', + }, + }, + }, + }); + + const exporter = new XlsxExporter({ + collectionManager: app.mainDataSource.collectionManager, + collection: Post, + chunkSize: 10, + columns: [{ dataIndex: ['json'], defaultTitle: '' }], + }); + + let error: any; + try { + await exporter.run({}); + } catch (e) { + error = e; + } + + expect(error).toBeDefined(); + expect(error.message).toContain('not found'); + }); + it('should export with json field', async () => { const Post = app.db.collection({ name: 'posts', diff --git a/packages/plugins/@nocobase/plugin-action-export/src/server/xlsx-exporter.ts b/packages/plugins/@nocobase/plugin-action-export/src/server/xlsx-exporter.ts index fd15343948..9b92b05d39 100644 --- a/packages/plugins/@nocobase/plugin-action-export/src/server/xlsx-exporter.ts +++ b/packages/plugins/@nocobase/plugin-action-export/src/server/xlsx-exporter.ts @@ -114,6 +114,9 @@ class XlsxExporter { } const field = this.options.collection.getField(col.dataIndex[0]); + if (!field) { + throw new Error(`Field "${col.dataIndex[0]}" not found: , please check the columns configuration.`); + } if (field.isRelationField()) { return col.dataIndex[0];