Node.js + Sequelize + SQL Server

标签 node.js sql-server sequelize.js datetimeoffset

我正在使用 SQL Server 2005 和 node.js

"dependencies": {
    "sequelize": "^4.42.0",
    "tedious": "^5.0.3"
  }

我正在尝试创建这个数据库

const con = require('./../dbo/connect');
const Processo = con.db.define('processo', {
    Id: {
        type: con.Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    Cavalo: { type: con.Sequelize.STRING },
    Reboque: { type: con.Sequelize.STRING },
    CNPJTransportadora: { type: con.Sequelize.STRING },
    Motorista: { type: con.Sequelize.STRING },
    CNH: { type: con.Sequelize.STRING },
    EntradaCarreta: { type: con.Sequelize.DATE },
    SaidaCarreta: { type: con.Sequelize.DATE },
    Tara: { type: con.Sequelize.DECIMAL(10, 3)  },
    PesoBruto: { type: con.Sequelize.DECIMAL(10, 3)  },
    Conteiner: { type: con.Sequelize.STRING },
    Dimensao: { type: con.Sequelize.STRING },
    IsoCode: { type: con.Sequelize.STRING },
    GMCI: { type: con.Sequelize.STRING },
    DT: { type: con.Sequelize.STRING },
    Navio: { type: con.Sequelize.STRING },
    Viagem: { type: con.Sequelize.STRING },
    Origem: { type: con.Sequelize.STRING },
    CodOrigem: { type: con.Sequelize.STRING },
    Destino: { type: con.Sequelize.STRING },
    CodDestino: { type: con.Sequelize.STRING },
    Regime: { type: con.Sequelize.STRING }
});
Processo.sync();
module.exports = {
    Processo,
    Sequelize:con.Sequelize
};


但是当运行同步功能时,我收到这个错误:

Unhandled rejection SequelizeDatabaseError: Column, parameter, or variable #7: Cannot find data type DATETIMEOFFSET. at Query.formatError (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\s equelize\lib\dialects\mssql\query.js:315:12) at Request.connection.lib.Request [as userCallback] (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\r ecepcao-processo\node_modules\sequelize\lib\dialects\mssql\query.js:107:25) at Request.callback (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\te dious\lib\request.js:37:27) at Connection.endOfMessageMarkerReceived (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-pro cesso\node_modules\tedious\lib\connection.js:2118:20) at Connection.dispatchEvent (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_mo dules\tedious\lib\connection.js:1136:36) at Parser.tokenStreamParser.on (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node _modules\tedious\lib\connection.js:941:14) at Parser.emit (events.js:189:13) at Parser.parser.on.token (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modu les\tedious\lib\token\token-stream-parser.js:27:14) at Parser.emit (events.js:189:13) at addChunk (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\readable-s tream\lib_stream_readable.js:296:12) at readableAddChunk (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\re adable-stream\lib_stream_readable.js:278:11) at Parser.Readable.push (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_module s\readable-stream\lib_stream_readable.js:239:10) at Parser.Transform.push (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modul es\readable-stream\lib_stream_transform.js:139:32) at Parser.afterTransform (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modul es\readable-stream\lib_stream_transform.js:88:10) at Parser._transform (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\t edious\lib\token\stream-parser.js:41:7) at Parser.Transform._read (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modu les\readable-stream\lib_stream_transform.js:177:10) at Parser.Transform._write (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_mod ules\readable-stream\lib_stream_transform.js:164:83) at doWrite (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\readable-st ream\lib_stream_writable.js:405:139) at writeOrBuffer (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\reada ble-stream\lib_stream_writable.js:394:5) at Parser.Writable.write (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modul es\readable-stream\lib_stream_writable.js:303:11) at Parser.addEndOfMessageMarker (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\nod e_modules\tedious\lib\token\token-stream-parser.js:45:24) at Connection.message (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\ tedious\lib\connection.js:2107:32)

最佳答案

我知道这离最好的解决方案很远,但我是这样解决的:

'use strict';
const fs = require('fs');
const paths = {
    datatypes: `${__dirname}/../../node_modules/sequelize/lib/dialects/mssql/data-types.js`
};

async function rewriteFile(path, find, replace) {
    let data = fs.readFileSync(paths[path], 'utf-8');
    let newValue = data.replace(find, replace);
    return await fs.writeFileSync(paths[path], newValue, 'utf-8');
}
module.exports = {
    rewriteFile
}


并在启动 express 之前运行以下代码:

const sequelizeBug = require('./../api/helpers/sequelize-bug');
sequelizeBug.rewriteFile('datatypes', 'DATETIMEOFFSET','DATETIME');


如果有人有最佳解决方案,我接受,谢谢。

关于Node.js + Sequelize + SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874395/

相关文章:

node.js - 如何使用 Sequelize 创建与特定键的关联?

mysql - 按计数关联排序?

eclipse - 使用 Eclipse 调试 Node.js 应用程序

sql - 在表中查找距离给定值最远的值

sql-server - 将自由文本搜索与其他条件相结合的速度很慢

sql-server - 如何查找sql​​ server中一个表的所有依赖关系

sql - 动态值的 Postgres jsonb 查询

javascript - Puppeteer 有时会抛出 "UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded"

javascript - 以最有效的方式更新许多(100k+)文档 MongoDB

node.js - 对于 DynamoDB 和 Node ,我应该使用数据映射器吗?