GET-запрос не выполняется на модели со строкой 'id', если 'id' начинается с цифры - Trailsjs

У меня есть модель под названием Product с двумя полями id и name. У меня установлены следы.

'use strict'

const Model = require('trails/model')

/**
 * @module Product
 * @description TODO document Model
 */
module.exports = class Productextends Model {

  static config (app, Sequelize) {
    return {
      store: 'db',
      options: {
        schema: 'dbo',
        tableName: 'dimProduct',
        timestamps: false,
        classMethods: {
          //If you need associations, put them here
          associate: (models) => {
          }
        }
      }
    }
  }

  static schema (app, Sequelize) {
    return {
      id: {
        type: Sequelize.STRING,
        allowNull: false,
        primaryKey: true,
        field: 'ProductCode'
      },
      name: {
        type: Sequelize.STRING,
        field: 'ProductName'
      }
    }
  }
}

Когда я использую почтальон и получаю запрос localhost:3000/product?id=XX2525 SQL генерируется в логгере

SELECT [Product].[ProductCode] AS [id], [Product].[ProductName] AS [name] FROM [dbo].[dimProduct] AS [Product] WHERE [Product].[ProductCode] = N'XX2525';

Если я сделаю тот же запрос на идентификатор, который начинается с числа localhost:3000/product?id=10XX2525 сгенерированный sql

SELECT [Product].[ProductCode] AS [id], [Product].[ProductName] AS [name] FROM [dbo].[dimProduct] AS [Product] WHERE [Product].[ProductCode] = 10;

Я не уверен, является ли это следом или следствием, но если в моей модели мое поле определено как строка, я бы ожидал, что запрос будет искать как tring, а не применять какие-либо преобразования. Ошибка выглядит следующим образом (001CAR - это первый идентификатор в моей базе данных):

{
    "name": "SequelizeDatabaseError",
    "message": "Conversion failed when converting the varchar value '1CAR' to data type int.",
    "parent": {
        "message": "Conversion failed when converting the varchar value '1CAR' to data type int.",
        "code": "EREQUEST",
        "number": 245,
        "state": 1,
        "class": 16,
        "serverName": "db",
        "procName": "",
        "lineNumber": 1,
        "sql": "SELECT [Product].[ProductCode] AS [id], [Product].[ProductName] AS [name] FROM [dbo].[dimProduct] AS [Product] WHERE [Product].[ProductCode] = 10;"
    },
    "original": {
        "message": "Conversion failed when converting the varchar value '1CAR' to data type int.",
        "code": "EREQUEST",
        "number": 245,
        "state": 1,
        "class": 16,
        "serverName": "db",
        "procName": "",
        "lineNumber": 1,
        "sql": "SELECT [Product].[ProductCode] AS [id], [Product].[ProductName] AS [name] FROM [dbo].[dimProduct] AS [Product] WHERE [Product].[ProductCode] = 10;"
    },
    "sql": "SELECT [Product].[ProductCode] AS [id], [Product].[ProductName] AS [name] FROM [dbo].[dimProduct] AS [Product] WHERE [Product].[ProductCode] = 10;",
    "isBoom": true,
    "isServer": true,
    "data": null,
    "output": {
        "statusCode": 500,
        "payload": {
            "statusCode": 500,
            "error": "Internal Server Error",
            "message": "An internal server error occurred"
        },
        "headers": {}
    }
}

У меня есть зависимости package.json, и я использую узел v6.11.5

"dependencies": {
    "ejs": "^2.5.7",
    "express": "^4.16.2",
    "tedious": "^2.0.0",
    "trailpack-express": "^2.0.3",
    "trailpack-footprints": "^2.0.0",
    "trailpack-repl": "v2-latest",
    "trailpack-router": "v2-latest",
    "trailpack-sequelize": "^2.0.0",
    "trails": "v2-latest"
  }

1 ответ

Решение

Вы столкнулись с ошибкой, которая уже исправлена ​​этим пиаром https://github.com/trailsjs/trailpack/pull/44 но это исправление, по-видимому, не развернуто на npm.

В trailpack-express v2.0.6 есть это исправление, обновите его, и у вас больше не должно быть проблем

Другие вопросы по тегам