Ok, donc après de nombreuses recherches et débogages, j'ai trouvé 2 choses.
1) Mon instance de sequelize était sequelize.sequelize
, en raison d'un module.exports
avec lodash. Mon mauvais, je ne m'en souvenais pas et je ne l'ai même pas mentionné dans la question. Je suis désolé.
2) Le offset
et limit
utilisez fetch
et génère ainsi une syntaxe SQL invalide pour SQL 2008.
J'ai dû effectuer une requête brute, en utilisant sequelize.sequelize.query()
(puisque mon instance était sequelize.sequelize).
voici mon code complet, y compris le routage express et le format laid de la requête :
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});
});
});
Et si vous (comme moi) vous demandez pourquoi sequelize.sequelize
au lieu de seulement sequelize
?
Eh bien, c'est parce que var sequelize
est un require()
à partir d'un fichier avec le module.exports
suivant :
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
C'est pourquoi il suffit de sequelize.query()
a été renvoyé undefined
, et sequelize.sequelize.query()
fonctionne bien, car en vrai mon sequelize
la variable est un objet avec le sequelize
propriété étant la véritable instance de connexion sequelize.