Ok, quindi dopo molte ricerche e debug, ho trovato 2 cose.
1) La mia istanza di sequelize era sequelize.sequelize
, a causa di un module.exports
con lodash. Mio male, non me lo ricordavo e non l'ho nemmeno menzionato nella domanda. Mi dispiace per questo.
2) Il offset
e limit
usa fetch
e quindi genera una sintassi SQL non valida per SQL 2008.
Ho dovuto eseguire una query grezza, utilizzando sequelize.sequelize.query()
(dal momento che la mia istanza era sequelize.sequelize).
ecco il mio codice completo, incluso il routing rapido e il formato brutto per la 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});
});
});
E se tu (come me) ti chiedi perché sequelize.sequelize
invece di solo sequelize
?
Bene, questo è perché var sequelize
è un require()
da un file con il seguente module.exports
:
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Quindi questo è il motivo per cui solo sequelize.query()
è stato restituito undefined
e sequelize.sequelize.query()
funziona bene, perché in true il mio sequelize
variabile è un Oggetto con sequelize
la proprietà è la vera istanza di connessione di sequele.