Ok, dus na veel zoeken en debuggen, vond ik 2 dingen.
1) Mijn vervolgexemplaar was sequelize.sequelize
, vanwege een module.exports
met lodas. Mijn fout, ik herinnerde me dat niet en noemde het niet eens in de vraag. Het spijt me.
2) De offset
en limit
gebruik wel fetch
en genereert dus ongeldige SQL-sintax voor SQL 2008.
Ik moest een onbewerkte zoekopdracht uitvoeren met sequelize.sequelize.query()
(aangezien mijn exemplaar sequelize.sequelize was).
hier is mijn volledige code, inclusief express routing en lelijk formaat voor de query:
var express = require('express')
var app = express();
app.use('/tableName', function(req, res){
var page = req.params.page || 2;
var rowsPerPage = req.params.perpage || 30;
if(rowsPerPage > 100){
rowsPerPage = 100; //this limits how many per page
}
var theQuery = 'declare @rowsPerPage as bigint; '+
'declare @pageNum as bigint;'+
'set @rowsPerPage='+rowsPerPage+'; '+
'set @pageNum='+page+'; '+
'With SQLPaging As ( '+
'Select Top(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY ID asc) '+
'as resultNum, * '+
'FROM tableName )'+
'select * from SQLPaging with (nolock) where resultNum > ((@pageNum - 1) * @rowsPerPage);';
sequelize.sequelize.query(theQuery)
.spread(function(result) {
res.json({result: result});
});
});
En als je (zoals ik) je afvraagt waarom sequelize.sequelize
in plaats van alleen sequelize
?
Nou, dit komt omdat var sequelize
is een require()
uit een bestand met de volgende module.exports
:
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Dus dit is waarom gewoon sequelize.query()
is geretourneerd undefined
, en sequelize.sequelize.query()
werkt prima, want in waar mijn sequelize
variabele is een Object met de sequelize
eigenschap is de echte vervolgverbindingsinstantie.