balderdashy / balderdashy/sails
When using sails-disk: Certain PATCH requests to the blueprint API throw "Cannot read property 'id' of undefined" and crash the local development server
- Dominant language
- JavaScript
- Stars
- 22.8k
- Forks
- 1.9k
- PR merge metrics
- No merged PRs in 30d
Description
**Sails version**: 1.0.3
**Node version**: v8.12.0
**NPM version**: 6.4.1
**DB adapter name**: N/A
**DB adapter version**: N/A
**Operating system**: MacOSX 10.12.6
I consistently (over a week) get this error while running a simple use case
A Todo app connects throught sails.io.js to GET /todo/1 and subscribes (as Sails does by default with the blueprint API). I only use blueprint API routes and the server has a simple model called Todo.js. Everytime you edit a task in the todo, the app sends a socket.request of verb PATCH to /todo/1 (hardcoded and there're no more todos, just one in DB) to update the todo.
While I develop the app and create and delete tasks, many of these PATCH calls get executed (humanly many, as fast I can type changes on a keyboard - no automated tests).
**Now randomly at some point one seems to fail**. **I believe this to be a Sails bug.**
sails.sid is enabled and it works. My app only has one todo, it is hardcoded client-side and I do not create any more - ever. There's one and only /todo/1
This sounds like the update function having a bug whereby it tries to access an array unsafely, but I can't figure what it exactly is trying to do on the line.
The closest issue I could find to this, which is from a long time ago:
https://github.com/balderdashy/sails/issues/2175
The stack I'm getting:
```
verbo: Interpreting socket.io message as VR (virtual request) to "patch /todo/1"...
: Handling virtual request :: Running virtual querystring parser...
: Handling virtual request :: Running virtual body parser...
verbo: Receiving incoming message from Socket.io: { method: 'patch',
headers: {},
data:
{ createdAt: 1544984552138,
updatedAt: 1544990618212,
id: 1,
tasks: [ [Object], [Object], [Object], [Object] ],
tasksCompleted: [ [Object] ] },
url: '/todo/1' }
verbo: Interpreting socket.io message as VR (virtual request) to "patch /todo/1"...
: Handling virtual request :: Running virtual querystring parser...
: Handling virtual request :: Running virtual body parser...
warn: Unexpected output from `Todo.update`.
verbo: Lowering sails...
: Sent kill signal to child process (12166)...
: Shutting down HTTP server...
/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/sails/lib/hooks/blueprints/actions/update.js:96
var pk = updatedRecord[Model.primaryKey];
^
TypeError: Cannot read property 'id' of undefined
at updated (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/sails/lib/hooks/blueprints/actions/update.js:96:29)
at proceedToFinalAfterExecLC (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/parley/lib/private/Deferred.js:1151:14)
at proceedToInterceptsAndChecks (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/parley/lib/private/Deferred.js:909:12)
at proceedToAfterExecSpinlocks (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/parley/lib/private/Deferred.js:841:10)
at /Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/parley/lib/private/Deferred.js:303:7
at _afterIteratingOverRecords (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/waterline/lib/waterline/methods/update.js:441:22)
at /Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:952:25
at eachOfArrayLike (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:990:13)
at eachOf (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:1052:9)
at Object.eachLimit (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:3111:7)
at _afterReplacingAllCollections (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/waterline/lib/waterline/methods/update.js:413:19)
at /Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:952:25
at eachOfArrayLike (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:990:13)
at eachOf (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:1052:9)
at Object.eachLimit (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/async/dist/async.js:3111:7)
at _afterTalkingToAdapter (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/waterline/lib/waterline/methods/update.js:389:17)
at /Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/sails-disk/index.js:488:46
at /Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/sails-disk/index.js:450:16
at newArguments.(anonymous function) (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/nedb/lib/executor.js:29:17)
at Cursor.execFn (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/nedb/lib/datastore.js:484:12)
at callback (/Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/nedb/lib/cursor.js:126:19)
at /Users/albertpeiro/Documents/albertpeiro/todo-api/node_modules/nedb/lib/cursor.js:193:12
```
Contributor guide
Assessment
This issue has not been assessed yet.