Javascript 使用Sequelize在GraphQL查询中将Datetime字段输出为字符串

Javascript 使用Sequelize在GraphQL查询中将Datetime字段输出为字符串,javascript,node.js,graphql,sequelize.js,apollo-server,Javascript,Node.js,Graphql,Sequelize.js,Apollo Server,在使用Sequelize获取数据时,如何获取要在GraphQL查询中作为字符串输出的MySQL datetime字段 以下是我表格的(简化)结构: CREATE TABLE `things` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `start_date` datetime DEFAULT NULL, `creation_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

在使用Sequelize获取数据时,如何获取要在GraphQL查询中作为字符串输出的MySQL datetime字段

以下是我表格的(简化)结构:

CREATE TABLE `things` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `start_date` datetime DEFAULT NULL,
  `creation_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
以下是我的(简化)Sequelize模型:

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('things', {
        id: {
            type: DataTypes.INTEGER(10).UNSIGNED,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        start_date: {
            type: DataTypes.DATE,
            allowNull: true
        },
        creation_date: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: sequelize.literal('CURRENT_TIMESTAMP')
        },
    }, {
        tableName: 'things',
        timestamps: false
    });
};
下面是我的GraphQL模式定义:

import { gql } from 'apollo-server-express'
import * as db from '../database'

export const typeDefs = gql`
    extend type Query {
        things: [Thing]
    }

    type Thing {
        id: ID!
        creationDate: String
        startDate: String
    }
`

export const resolvers = {
    Query: {
        things: async () => db.things.findAll(),
    },
}
当我运行
things
查询时,对于
creationDate
startDate
字段,我总是得到
null

我想要得到的是ISO 8601格式的字符串形式的日期和时间。

您接收null的原因是Sequelize返回的对象上的属性名称与字段名称不匹配(
creation\u date
vs
creationDate
)。有关详细说明,请参阅

无论如何,您仍然需要提供一个自定义解析器来格式化日期。如果没有它,您将以纪元日期结束。您将需要执行以下操作:

const resolvers = {
  Thing: {
    creationDate: (thing) => {
      // thing is an instance of your Sequelize model
      // thing.creation_date is an instance of Date
      return thing.creation_date.toISOString()
    },
  },
}