2016-12-11 5 views
0

Ich speichere einen Wert für ein postgres-Feld vom Typ timestamp with time zone. Ich war in meinem Apollo-Schema, das Feld als int definiert, aber ich bin immer diese Fehlermeldung in dem Resolver:Apollo/GraphQL: Feldtyp für Zeitstempel?

column "apptDateTime" is of type timestamp with time zone but expression is of type integer 

Looking up GraphQL data types, ich noch keine Art sehen, die als entsprechend zitiert ein Feld vom Typ Zeitmarke.

Welcher korrekte Feldtyp wird im Apollo-Schema für ein Feld vom Typ timestamp in der Datenbank verwendet?

+0

Kasse der Abschnitt am Tag Skalar: http: // graphql.org/learn/schema/#scalar-types Wahrscheinlich am besten, um einen benutzerdefinierten Skalar zu definieren. –

+0

Ich lese gerade Daten und Apollo, und ich stelle fest, dass es als Tally Posts erforderlich ist, benutzerdefinierten Code für diesen Zweck hinzuzufügen. Ich habe die Dokumentation hier gefunden: http://dev.apollodata.com/tools/graphql-tools/scalars.html#Date-as-a-scalar Die Dokumente definieren die Resolver-Map, scheinen aber nicht zu erscheinen wie Sie die Resolver-Map in Ihr Schema und/oder andere Resolver aufnehmen. Kann jemand ein Beispiel für die Referenzierung einer Resolver-Map aus Ihren anderen Apollo-Resolvern bereitstellen oder eine Verknüpfung herstellen? – VikR

+0

Dies ist, wie es für json getan wurde: https://github.com/taion/graphql-type-json/blob/master/src/index.js –

Antwort

0

Ich habe meine Mutation arbeiten, die ein Feld vom Typ Timestamp mit Zeitzone enthält. Ich habe es getan, indem ich das Schema für mein apptDateTime-Feld von Int in String änderte und eine ISO-Zeichenfolge übergab. Sequelize und Postgres sorgten dafür, dass es in ein Feld vom Typ Timestamp mit Zeitzone umgewandelt wurde.

+0

können Sie etwas von Ihrem Code zeigen? brauchst du nicht: require ('pg'). types.setTypeParser (1114, function (stringValue) { return new Datum (stringValue + "+0000"); // zB, UTC offset.Verwende einen beliebigen Offset dgl. }); – stackdave

0

Ich finde diese Art und Weise mit Eingabe in Formularen zu arbeiten, benötigt konvertiert von Client (Eingabeformular) an den Server und vom Server zum Client (Eingabemaske)

Graphql:

updatedAt: String 

Sequelize:

updatedAt: { type: Sequelize.DATE }, 

Postgresql:

"createdAt" timestamp(6) with time zone DEFAULT now(), 

Wert auf die Server-Transformation:

value = dateToISO(value); 

Wert an den Kunden verwandeln:

if (isNil(value)) { 
    value = ''; 
    } else { 
    value = value.toLocaleDateString() +' '+ value.toLocaleTimeString(); 
    } 

die Helfer:

let dateToISO = function (dateString) { 
    if (!dateString) { 
    return null; 
    } 
    let p = dateString.split(/\D/g); 
    /* It's up your date on input in this case come from DD-MM-YYYY 
    for MM-DD-YYY use: return [p[1], p[2], p[0]].join('-'); */ 
    return [p[2], p[1], p[0]].join('-'); 

};