Ok, nach viel Suchen und Debuggen habe ich 2 Dinge gefunden.
1) Meine Sequelize-Instanz war sequelize.sequelize
, aufgrund eines module.exports
mit Lodash. Meine Güte, daran konnte ich mich nicht erinnern und habe es in der Frage nicht einmal erwähnt. Das tut mir leid.
2) Der offset
und limit
Verwenden Sie fetch
und generiert somit eine ungültige SQL-Syntax für SQL 2008.
Ich musste eine Rohabfrage mit sequelize.sequelize.query()
durchführen (da meine Instanz sequelize.sequelize war).
Hier ist mein vollständiger Code, einschließlich Express-Routing und hässlichem Format für die Abfrage:
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});
});
});
Und wenn Sie sich (so wie ich) fragen, warum sequelize.sequelize
statt nur sequelize
?
Nun, das liegt daran, dass var sequelize
ist ein require()
aus einer Datei mit folgendem module.exports
:
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Deshalb einfach sequelize.query()
wurde undefined
zurückgegeben , und sequelize.sequelize.query()
funktioniert gut, weil in Wahrheit mein sequelize
Variable ist ein Objekt mit dem sequelize
Eigenschaft, die die eigentliche Sequelize-Verbindungsinstanz ist.