Ok, så efter masser af søgning og fejlfinding fandt jeg 2 ting.
1) Min sequelize-instans var sequelize.sequelize
, på grund af en module.exports
med lodash. Min dårlige, det huskede jeg ikke, og nævnte det ikke engang i spørgsmålet. Jeg er ked af dette.
2) offset
og limit
brug fetch
og genererer dermed ugyldig SQL sintax for SQL 2008.
Jeg var nødt til at udføre en rå forespørgsel ved at bruge sequelize.sequelize.query()
(da mit eksempel var sequelize.sequelize).
her er min fulde kode, inklusive ekspres routing og grimt format for forespørgslen:
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});
});
});
Og hvis du (som jeg gjorde) undrer dig over hvorfor sequelize.sequelize
i stedet for kun sequelize
?
Nå, det er fordi var sequelize
er en require()
fra en fil med følgende module.exports
:
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Så det er derfor bare sequelize.query()
blev returneret undefined
, og sequelize.sequelize.query()
fungerer fint, for i sandhed min sequelize
variabel er et objekt med sequelize
egenskaben er den rigtige sequelize-forbindelsesinstans.