5 ms·
> You can pick a nice ORM (like sequelize) I'm gonna stop you right there. Node is a helpful tool and I enjoy using it, but Sequelize was nothing but pure pain
by bschwindHN 10y ago
> You can pick a nice ORM (like sequelize)
I'm gonna stop you right there. Node is a helpful tool and I enjoy using it, but Sequelize was nothing but pure pain when I used it. You're much better off running raw SQL, or using a query builder like KnexJS.
I would never use Sequelize for more than a 1-table read or update.
- tracker1 10y agohonestly, in JS/Node, I find it easiest to use a SQL adapter that can handle template strings as parameterized queries... const results = await sql.query` SELECT ... WHERE foo = ${bar} `; if (!results && results.length) return; await myQueue.add(results); Which works unbelievably well... There's not nearly as much need for boilerplate/translation layers in what is already a dynamic environment. I wrote a wrapper for ms-sql when migrating data, it took 2-3 days to get it done, but writing queries as above was so easy to work with it was incredibly nice. I'd rather work with a db that has a friendlier API to work with or abstract around... but writing a little template driven sql is often better than layers of boilerplate like an ORM.. and I still don't really get mongoose.
- tonyarkles 10y agoMaybe I'm missing something, but that looks like SQL Injection ready to happen.
- tracker1 10y agosql.query is a function that will receive two arrays, one is the strings part, the other is the injected values... the template processor takes those arrays and turns it into a parameterized query to the database.
- tonyarkles 10y agoVery cool! In that example though... where's the array? And don't backticks do string interpolation?
- sime2009 10y agoBackticks by themselves will do string interpolation. But backticks with a function name in front will do something a bit different. In this case 'sql.query' is a function and the JS will pass it an array which represents the contents of the backtick string. There the function can do what it likes and return a result. 'sql.query' builds a proper (and safe!) SQL query and executes it. The backtick feature in ES2015 is really cool and allows for some great DSL type features.
- tonyarkles 10y agoNeat! Thanks for the awesome explanation!
- alxndr 10y agoThis feature is apparently called "tagged template strings"; more on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
- bschwindHN 10y agoThat looks fantastic, I'll take that any day over an ORM in JS.
- tracker1 10y agoHere's the one I wrote for mssql[1], though it should really be updated, and probably use tedious directly, instead of mssql. [1] https://www.npmjs.com/package/mssql-ng https://www.npmjs.com/package/mssql-ng