generalpiston / typeorm-encrypted

Encrypted field for typeorm.
MIT License
74 stars 19 forks source link

Many to many save fails #15

Closed collabcoding614 closed 4 years ago

collabcoding614 commented 4 years ago

Issue type: [x] bug report [x] documentation issue

Database system/driver: [x] mysql / mariadb

TypeORM version: [x] latest - 0.2.22

Steps to reproduce or a small repository showing the problem:

 @Override("createOneBase")
  async createOne(@ParsedRequest() req: CrudRequest, @ParsedBody() dto: Resource) {
    const location = new Location();
    location.name = "locationone";
    await getConnection().manager.save(location);
    const resource = new Resource();
    resource.color = "dogs";
    resource.locations = [location];
    await getConnection().manager.save(resource);

  }

I added a console log in the encrypt method of typeorm-encrypted/lib/transformers/index.js and here's the results


// Line 8 and 9 of index.js
//function encrypt(entity) {
//    console.log('entity', entity);

entity Location { name: 'locationname' }

entity Resource {
  color: 'dogs',
  locations: [
    Location {
      name: 'locationname',
      address: null,
      id: 15,
      createdAt: 2020-02-25T18:52:48.358Z,
      updatedAt: 2020-02-25T18:52:48.358Z
    }
  ]
}
entity undefined

// end of log for typeorm-encrypted/lib/transformers/index.js

Here's the error I get:

TypeError: Cannot read property 'constructor' of undefined
    at Object.encrypt (/Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm-encrypted/lib/transformers/index.js:15:83)
    at AutoEncryptSubscriber.beforeInsert (/Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm-encrypted/lib/subscribers/AutoEncryptSubscriber.js:18:24)
    at /Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm/subscriber/Broadcaster.js:39:54
    at Array.forEach (<anonymous>)
    at Broadcaster.broadcastBeforeInsertEvent (/Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm/subscriber/Broadcaster.js:37:53)
    at /Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm/persistence/SubjectExecutor.js:162:99
    at Array.forEach (<anonymous>)
    at SubjectExecutor.broadcastBeforeEventsForAll (/Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm/persistence/SubjectExecutor.js:162:33)
    at SubjectExecutor.<anonymous> (/Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/typeorm/persistence/SubjectExecutor.js:68:50)
    at step (/Users/natedeazy/projects/MedOneScheduling/scheduling-backend/node_modules/tslib/tslib.js:136:27)
generalpiston commented 4 years ago

Seems like there is an entity that is null for some reason. Let's add some defensive code.

generalpiston commented 4 years ago

Release 0.5.2 with the fix. Please re-open if it's still an issue. I didn't have a chance to test out your specific usecase.