createdAt не может быть массивом или объектом - PullRequest
0 голосов
/ 29 мая 2020

Может кто-нибудь мне помочь. У меня проблемы с вставкой записи в базу данных с помощью sequelize, created_at и updated_at заполняются автоматически, и это с такой ошибкой:

"name": "SequelizeValidationError",
"errors": [
    {
        "message": "createdAt cannot be an array or an object",
        "type": "string violation",
        "path": "createdAt",
        "value": "2020-05-28T22:04:45.023Z",
        "origin": "CORE",
        "instance": {
            "id": null,
            "placeId": "1",
            "userId": 3,
            "name": "Alex Santos",
            "email": "customer@gmail.com",
            "documento": "00000000000",
            "phone": "(37)98596-9869",
            "updatedAt": "2020-05-28T22:04:45.023Z",
            "createdAt": "2020-05-28T22:04:45.023Z"
        },
        "validatorKey": "not_a_string",
        "validatorName": null,
        "validatorArgs": []
    },
    {
        "message": "customer.updateAt cannot be null",
        "type": "notNull Violation",
        "path": "updateAt",
        "value": null,
        "origin": "CORE",
        "instance": {
            "id": null,
            "placeId": "1",
            "userId": 3,
            "name": "Alex Santos",
            "email": "customer@gmail.com",
            "documento": "031.682.546-81",
            "phone": "(37)98596-9869",
            "updatedAt": "2020-05-28T22:04:45.023Z",
            "createdAt": "2020-05-28T22:04:45.023Z"
        },
        "validatorKey": "is_null",
        "validatorName": null,
        "validatorArgs": []
    }
]

}

Может ли кто-нибудь предложить помощь? Я думаю, что в функции customer. js create () с моей стороны что-то не так.

Может быть другое решение?

customer. js

   /* jshint indent: 1 */

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('customer', {
        id: {
            type: DataTypes.INTEGER(11),
            allowNull: false,
            primaryKey: true,
            autoIncrement: true,
            field: 'id'
        },
        placeId: {
            type: DataTypes.INTEGER(11),
            allowNull: false,
            references: {
                model: 'places',
                key: 'id'
            },
            field: 'place_id'
        },
        userId: {
            type: DataTypes.INTEGER(11),
            allowNull: false,
            references: {
                model: 'users',
                key: 'id'
            },
            field: 'user_id'
        },
        customerId: {
            type: DataTypes.INTEGER(11),
            allowNull: true,
            field: 'customer_id'
        },
        name: {
            type: DataTypes.STRING(100),
            allowNull: false,
            field: 'name'
        },
        email: {
            type: DataTypes.STRING(255),
            allowNull: false,
            field: 'email'
        },
        documento: {
            type: DataTypes.STRING(16),
            allowNull: false,
            defaultValue: '',
            field: 'documento'
        },
        phone: {
            type: DataTypes.STRING(12),
            allowNull: false,
            field: 'phone'
        },
        createdAt: {
            type: DataTypes.STRING(255),
            allowNull: false,
            field: 'created_at'
        },
        updateAt: {
            type: DataTypes.STRING(255),
            allowNull: false,
            field: 'update_at'
        }

    }, {
        tableName: 'customer'
    });
};

CustomerController. js

const Customers = require('./../models/custumers')
const Sequelize = require('sequelize');
const db = require('../../bin/database');
const Customer = new Customers(db, Sequelize);
exports.create = async(req, res) => {
    decodeToken = await jwt.decodeToken(req.headers['x-access-token'])
    let userId = decodeToken.id
    console.log(new Date())
    let { placeId, customerId, name, email, documento, phone } = req.body
    Customer.create({
            placeId,
            userId,
            customerId,
            name,
            email,
            documento,
            phone
        })
        .then((Customer) => {
            return res.status(200).send({ Customer: Customer })
        }).catch(err => {
            res.status(423).send(err);
        });
}

1 Ответ

0 голосов
/ 29 мая 2020

Сообщение об ошибке сообщает вам, что не так. Вы определили столбец createdAt как String, но может показаться, что вы отправляете объект (скорее всего, типа Date). Значение типа Date не является строкой, поэтому Sequelize предупреждает вас информацией, например "validatorKey": "not_a_string" и "type": "string violation".

Я не знаю, почему вы решили сохранить метку времени как String, но часть исправления состоит в том, чтобы изменить столбец на тип Date.

Вы также упомянули, что значение столбца заполняется автоматически, но я не вижу нигде, где это могло бы произойти. Если вы явно не устанавливаете значение по умолчанию для столбца, а затем не предоставляете значение при фиксации сеанса, эти столбцы не будут автоматически заполнены.

Короткий ответ: измените тип столбца на DATE и не забудьте установить метку времени для значения перед фиксацией в базе данных.

...