JamStack E -Commerce als nächstes bietet eine Möglichkeit, mit einer vollständig konfigurierbaren E -Commerce -Site mit Next.js.
Aus der Box verwendet die Website vollständig statische Daten, die von einem Anbieter von providers/inventoryProvider.js stammen. Sie können diesen Anbieter aktualisieren, um Daten von jeder realen API abzurufen, indem Sie den Aufruf in der getInventory -Funktion ändern.

Klicken Sie hier, um eine Live -Vorschau anzuzeigen.




$ git clone https://github.com/jamstack-cms/jamstack-ecommerce.git$ yarn
# or
$ npm install$ npm run dev
# or to build
$ npm run buildVerwenden Sie die Vercel CLI
vercelnpx serverlessDieses Projekt wird mit Rückenwind gestaltet. Um mehr zu erfahren, wie dies funktioniert, lesen Sie die Dokumentation von Rückenwind hier.
Die Hauptdateien, Komponenten und Bilder, die Sie möglicherweise ändern / ändern möchten, sind:
Logo - public/logo.png
Schaltfläche, ListItem usw. - Komponenten
Formularkomponenten - Komponenten/Formkomponenten
Kontext (Zustand) - Kontext/Maincontext.js
Seiten (Administrator, Karren, Kasse, Index) - Seiten
Vorlagen (Kategorieansicht, Einzelelementansicht, Bestandsansichten) - Vorlagen
Bei der Einrichtung wird das Inventar aus einer lokalen, hart codierten Array von Inventarelementen abgerufen. Dies kann einfach so konfiguriert werden, dass sie stattdessen von einer Remote -Quelle wie Shopify oder einer anderen CMS oder einer anderen Datenquelle abgerufen werden, indem der Inventaranbieter geändert wird.
Aktualisieren Sie Utils/InventoryProvider.js mit Ihrem eigenen Inventaranbieter.
Wenn Sie den Anbieter so ändern, dass Bilder von einer Remote -Quelle abgerufen werden, können Sie die Bilder auch lokal zum Erstellen von Zeit herunterladen, um die Leistung zu verbessern. Hier ist ein Beispiel für einen Code, der für diesen Anwendungsfall funktionieren sollte:
import fs from 'fs'
import axios from 'axios'
import path from 'path'
function getImageKey ( url ) {
const split = url . split ( '/' )
const key = split [ split . length - 1 ]
const keyItems = key . split ( '?' )
const imageKey = keyItems [ 0 ]
return imageKey
}
function getPathName ( url , pathName = 'downloads' ) {
let reqPath = path . join ( __dirname , '..' )
let key = getImageKey ( url )
key = key . replace ( / % / g , "" )
const rawPath = ` ${ reqPath } /public/ ${ pathName } / ${ key } `
return rawPath
}
async function downloadImage ( url ) {
return new Promise ( async ( resolve , reject ) => {
const path = getPathName ( url )
const writer = fs . createWriteStream ( path )
const response = await axios ( {
url ,
method : 'GET' ,
responseType : 'stream'
} )
response . data . pipe ( writer )
writer . on ( 'finish' , resolve )
writer . on ( 'error' , reject )
} )
}
export default downloadImageSie können diese Funktion verwenden, um die Bestandsdaten nach dem Abholen zu kartieren und die Bildpfade unter Bezugnahme auf den Ort der heruntergeladenen Bilder zu ersetzen, und würde wahrscheinlich ungefähr so aussehen:
await Promise . all (
inventory . map ( async ( item , index ) => {
try {
const relativeUrl = `../downloads/ ${ item . image } `
if ( ! fs . existsSync ( ` ${ __dirname } /public/downloads/ ${ item . image } ` ) ) {
await downloadImage ( image )
}
inventory [ index ] . image = relativeUrl
} catch ( err ) {
console . log ( 'error downloading image: ' , err )
}
} )
)Aktualisieren Sie die Seiten/admin.js mit Anmeldung, Anmelden, Anmeldung und Bestätigen Sie das Zeichen in Methoden.
Aktualisieren Sie Komponenten/ViewInventory.js mit Methoden, um mit der tatsächlichen Inventar -API zu interagieren.
Aktualisieren Sie Komponenten/FormComponents/AddInventory.js mit Methoden zum Hinzufügen von Elementen zur tatsächlichen Inventar -API.
Um ein Beispiel für die Verarbeitung von Zahlungen mit Stripe zu sehen, lesen Sie die Lambda-Funktion im Snippets-Ordner.
Erwägen Sie außerdem, die Summen zu überprüfen, indem Sie ein Array von IDs in die Funktion eingeben, die Gesamtsumme auf dem Server berechnen und dann die Summen zum Überprüfen und sicherstellen, dass sie übereinstimmen.