Добре, след много търсене и отстраняване на грешки намерих 2 неща.
1) Моят екземпляр на sequelize беше sequelize.sequelize
, поради module.exports
с лодаш. Лошото ми, не го запомних и дори не го споменах във въпроса. Съжалявам за това.
2) offset
и limit
използвайте fetch
и по този начин генерира невалиден SQL синтаксис за SQL 2008.
Трябваше да изпълня необработена заявка, използвайки sequelize.sequelize.query()
(тъй като моят екземпляр беше sequelize.sequelize).
ето пълния ми код, включително експресно маршрутизиране и грозен формат за заявката:
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});
});
});
И ако вие (както аз) се чудите защо sequelize.sequelize
вместо само sequelize
?
Е, това е така, защото var sequelize
е require()
от файл със следния module.exports
:
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Ето защо просто sequelize.query()
беше върнат undefined
и sequelize.sequelize.query()
работи добре, защото в действителност моят sequelize
променливата е обект с sequelize
свойството е реалният екземпляр на секвенизирана връзка.