【问题标题】:Node.js + Sequelize + SQL ServerNode.js + Sequelize + SQL Server
【发布时间】:2019-07-19 08:10:22
【问题描述】:

我正在使用 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
};

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

未处理的拒绝 SequelizeDatabaseError:列、参数或 变量 #7:找不到数据类型 DATETIMEOFFSET。 在 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) 在 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) 在 Request.callback (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\te dious\lib\request.js:37:27) 在 Connection.endOfMessageMarkerReceived (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-pro cesso\node_modules\tedious\lib\connection.js:2118:20) 在 Connection.dispatchEvent (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_mo dules\乏味\lib\connection.js:1136:36) 在 Parser.tokenStreamParser.on (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node _modules\tedious\lib\connection.js:941:14) 在 Parser.emit (events.js:189:13) 在 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) 在 Parser.emit (events.js:189:13) 在 addChunk (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\可读-s tream\lib_stream_readable.js:296:12) 在 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) 在 Parser.Readable.push (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_module s\可读流\lib_stream_readable.js:239:10) 在 Parser.Transform.push (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modul es\可读流\lib_stream_transform.js:139:32) 在 Parser.afterTransform (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modul es\可读流\lib_stream_transform.js:88:10) 在 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) 在 Parser.Transform._read (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modu les\可读流\lib_stream_transform.js:177:10) 在 Parser.Transform._write (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_mod ules\可读流\lib_stream_transform.js:164:83) 在 doWrite (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\可读-st ream\lib_stream_writable.js:405:139) 在 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) 在 Parser.Writable.write (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modul es\可读流\lib_stream_writable.js:303:11) 在 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) 在 Connection.message (C:\Users\tiago.santos\Desktop\Labs\diariamente-ts\node\gmci-e\recepcao-processo\node_modules\ 乏味\lib\connection.js:2107:32)

【问题讨论】:

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


    【解决方案1】:

    我知道最好的解决方案远非如此,但我是这样解决的:

    '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');

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2019-03-12
      • 2011-07-06
      • 2018-02-12
      • 2019-10-14
      • 2013-03-08
      • 2020-07-28
      相关资源
      最近更新 更多