Được rồi, vậy là sau rất nhiều lần tìm kiếm và gỡ lỗi, tôi đã tìm thấy 2 thứ.
1) Phiên bản tiếp theo của tôi là sequelize.sequelize
, do một module.exports
với lodash. Điều tồi tệ của tôi, tôi đã không nhớ điều đó, và thậm chí không đề cập đến nó trong câu hỏi. Tôi xin lỗi về điều này.
2) Phần bù offset
và limit
sử dụng fetch
và do đó tạo ra sintax SQL không hợp lệ cho SQL 2008.
Tôi phải thực hiện một truy vấn thô, sử dụng sequelize.sequelize.query()
(vì phiên bản của tôi là sequize.sequelize).
đây là mã đầy đủ của tôi, bao gồm định tuyến nhanh và định dạng xấu cho truy vấn:
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});
});
});
Và nếu bạn (như tôi đã làm) thắc mắc tại sao sequelize.sequelize
thay vì chỉ sequelize
?
Điều này là do var sequelize
là một require()
từ một tệp có module.exports
sau :
module.exports = lodash.extend({
sequelize: sequelize, //reffers to new Sequelize(db,user,pass,{});
Sequelize: Sequelize
}, db)
Vì vậy, đây là lý do tại sao chỉ sequelize.query()
đã được trả lại undefined
và sequelize.sequelize.query()
hoạt động tốt, vì đúng là sequelize
của tôi biến là một Đối tượng có sequelize
thuộc tính là phiên bản kết nối tiếp theo thực sự.