2017-08-01 4 views
0

Wie definiere ich ein Feld mit Typ als Array von Types.S3File. Grundsätzlich versuche ich, ein Array von Bildern in S3 zu speichern. Ich habe die Dokumentation der Keystone-Datenbank durchsucht. Sie haben angegeben, wie man den Typ als S3-Datei definiert. Betrachten Sie ein reales Lebensszenario wie es einen Benutzer gibt und er hat mehrere Bilder oder es gibt einen Blog und er enthält mehrere Bilder, wie kann ich das mit Keystone machen? Vielen Dank. Jede Hilfe wäre willkommen.Keystone JS mit Feld als Array von s3-Objekten

Antwort

0

Leider ist das mit dem S3File-Typ nicht möglich.

Während Array-Felder vorhanden sind, unterstützen sie momentan nur Zahlen- und String-Literale. Die Haupt-Site-Dokumentation für diese Felder wurde nicht aktualisiert, aber es sieht so aus, als ob sie bearbeitet wird. Hier finden Sie die WIP-Dokumentation für NumberArray und TextArray.

Sie können auch Arrays von Objekten mit einer Problemumgehung erstellen. Wenn Sie ein neues Modell mit einem Array als einzigem Feld erstellen, können Sie innerhalb dieses Arrays ein verschachteltes Schema erstellen. Wenn Sie versuchen, andere Felder neben dem Array anzugeben, werden Sie unglücklicherweise einen Fehler erzeugen. Ich habe diese Technik erfolgreich verwendet, um einen Warenkorb für eine E-Commerce-Site zu erstellen, an der ich gerade arbeite. Der Wagen Schema sieht wie folgt aus:

var Cart = new keystone.List('Cart'); 

Cart.schema.add({ 
    items: [{ 
    itemID: String, 
    quantity: Number 
    }] 
}); 

Sie können dann in den Warenkorb gelegt Modell beziehen eine Relationship Field in einem anderen Modell (in meinem Fall, die User-Modell).

Der Nachteil dieses Ansatzes ist, dass das Warenkorbmodell in der Admin-Benutzeroberfläche nicht bearbeitet werden kann. Dies ist kein Problem für mich, da der Warenkorb von Middleware aktualisiert wird, nicht von einem Benutzer. Ich bin mir nicht sicher, ob das für Ihren Anwendungsfall funktionieren würde, wenn Sie möchten, dass die Leute ihre eigenen Bilder hochladen können, aber vielleicht ist das der Ausgangspunkt für eine mögliche Lösung.

Auch ich bin mir nicht sicher, ob Sie es bemerkt haben, aber es gibt einen CloudinaryImages Feldtyp, der mehrere Bilder unterstützt. Das würde natürlich Cloudinary erfordern, aber sie haben eine kostenlose Stufe.

Hoffentlich finden Sie eine Problemumgehung, die Ihren Anforderungen entspricht, während dies eine frustrierende Einschränkung ist, habe ich Keystone gefunden, um eine großartige Plattform zu sein.

+0

Danke für die Antwort. Ja, ich habe Cloudinary-Images, aber der Client war nicht bereit, dafür zu bezahlen, und wir hatten ein Amazon-Konto, also überlegt, S3FileType zu verwenden. Wie auch immer, jetzt haben wir unseren Kunden davon überzeugt, Cloudinary zu verwenden und wir gehen mit CloudinaryImages. –