


wexCommerce - Platform eCommerce Sumber Terbuka yang minimalis dan berkuasa
Sebagai pembangun, saya tidak mahu terikat dengan templat Shopify, tetapi juga tidak mahu menggunakan API etalase mereka dengan apl tersuai. Saya mahu mempunyai penyelesaian yang boleh disesuaikan sepenuhnya yang boleh saya laraskan mengikut cara yang saya mahukan. Daripada ui/ux, backend dan devops. Jadi, saya membina penyelesaian sumber terbuka yang boleh disesuaikan sepenuhnya ini dengan Next.js, MongoDB dan Stripe untuk pembayaran.
Anda boleh mencari pautan demo di sini: https://wexcommerce.dynv6.net:8002
Dan kod sumber di sini: https://github.com/aelassas/wexcommerce
wexCommerce ialah platform eCommerce yang minimalis dan berkuasa yang dibina dengan Next.js menggunakan SSR, MongoDB dan Stripe untuk pembayaran.
Dengan penyelesaian ini, anda boleh menggunakan tapak web eCommerce anda sendiri yang boleh disesuaikan dengan kos minimum menggunakan persediaan berasaskan Docker. Platform ini menyepadukan Stripe untuk pembayaran selamat, dioptimumkan untuk SEO dan boleh dihoskan dengan cekap pada titisan RAM 1GB, menjadikannya pilihan ideal untuk operasi e-Dagang yang mencari penyelesaian berskala dan kos efektif. Anda boleh menggunakan penyelesaian ini di bawah $5 setiap bulan menggunakan penyedia awan seperti Hetzner atau DigitalOcean.
wexCommerce terdiri daripada bahagian hadapan dan papan pemuka pentadbir. Dari bahagian hadapan, pelanggan boleh mencari produk yang mereka inginkan, menambahkannya pada troli dan membayar keluar. Pelanggan boleh mendaftar dengan Google, Facebook, Apple atau E-mel dan membayar dengan Kad Kredit, Tunai Semasa Penghantaran, Pindahan Kawat, PayPal, Google Pay, Apple Pay, Link atau kaedah pembayaran Stripe yang lain. Setelah log masuk, mereka boleh mempunyai akses kepada sejarah pembelian mereka dan mengikut pesanan mereka. Daripada papan pemuka pentadbir, pentadbir boleh mengurus pesanan, pembayaran, produk, kategori, pelanggan dan tetapan umum seperti bahasa lalai, mata wang, penghantaran, penghantaran dan kaedah pembayaran yang diterima.
Keputusan reka bentuk utama telah dibuat untuk menggunakan TypeScript dan bukannya JavaScript kerana banyak kelebihannya. TypeScript menawarkan penaipan, perkakasan dan penyepaduan yang kuat, menghasilkan kod berkualiti tinggi, berskala, lebih mudah dibaca dan boleh diselenggara yang mudah untuk nyahpepijat dan diuji.
Saya melaburkan masa dan usaha yang besar untuk membina projek sumber terbuka ini untuk menjadikannya tersedia secara percuma kepada komuniti. Jika projek sumber terbuka ini telah membantu dalam kerja anda, pertimbangkan untuk menyokong pembangunan dan penyelenggaraan yang berterusan. Anda boleh menyumbang melalui Penajaan GitHub (sekali atau bulanan), PayPal atau Beli Saya Kopi. Malah bintang mudah pada repositori GitHub membantu menyebarkan berita dan amat dihargai.
Ciri-ciri
- Pengurusan saham
- Pengurusan pesanan
- Pengurusan pembayaran
- Pengurusan pelanggan
- Pelbagai pilihan pembayaran (Kad Kredit, Tunai Semasa Penghantaran, Pindahan Wayar, PayPal, Google Pay, Apple Pay, Pautan)
- Gerbang Pembayaran Jalur Operasi
- Berbilang pilihan penghantaran (Penghantaran ke rumah, pengeluaran kedai)
- Sokongan berbilang bahasa (Bahasa Inggeris, Perancis)
- Berbilang pilihan log masuk (Google, Facebook, Apple, E-mel)
- Halaman belakang responsif dan hujung hadapan
Demo Langsung
- URL: https://wexcommerce.dynv6.net:8002/
- Log masuk: jdoe@wexcommerce.com
- Kata laluan: sh0ppingC4rt
Sumber
- Ikhtisar
- Memasang (Dihoskan sendiri)
-
Memasang (Docker)
- Imej Docker
- SSL
- Sediakan Jalur
- Larikan dari Sumber
-
Pangkalan Data Demo
- Windows, Linux dan macOS
- Pelabuh
- Tukar Bahasa dan Mata Wang
- Tambah Bahasa Baharu
- Balak
Lesen
wexCommerce berlesen MIT.
Atas ialah kandungan terperinci wexCommerce - Platform eCommerce Sumber Terbuka yang minimalis dan berkuasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Kaedah penapis () dalam JavaScript digunakan untuk membuat array baru yang mengandungi semua elemen ujian lulus. 1.filter () tidak mengubah suai array asal, tetapi mengembalikan array baru yang memenuhi unsur -unsur bersyarat; 2. Sintaks asas adalah array.filter ((elemen) => {returnCondition;}); 3. Arahan objek boleh ditapis dengan nilai atribut, seperti penapisan pengguna yang lebih tua dari 30; 4. Menyokong penapisan pelbagai syarat, seperti memenuhi syarat umur dan nama panjang pada masa yang sama; 5. Boleh mengendalikan keadaan dinamik dan lulus parameter penapis ke dalam fungsi untuk mencapai penapisan fleksibel; 6. Apabila menggunakannya, berhati -hati untuk mengembalikan nilai Boolean untuk mengelakkan kembali tatasusunan kosong, dan menggabungkan kaedah lain untuk mencapai logik kompleks seperti padanan rentetan.

Dalam JavaScript, periksa sama ada array mengandungi nilai tertentu. Kaedah yang paling biasa termasuk (), yang mengembalikan nilai boolean dan sintaks adalah array. termasuk (valueTofind), contohnya buah -buahan. termasuk ('pisang') kembali benar; Sekiranya perlu bersesuaian dengan persekitaran lama, gunakan indexof (), seperti nombor.indexof (20)! ==-1 pulangan benar; Untuk objek atau data yang kompleks, beberapa () kaedah harus digunakan untuk perbandingan mendalam, seperti users.some (user => user.id === 1) pulangan benar.

Untuk mengendalikan kesilapan dalam fungsi asynchronous, gunakan cuba/menangkap, mengendalikannya dalam rantaian panggilan, gunakan kaedah .catch (), dan dengar peristiwa yang tidak dimanfaatkan. 1. Gunakan cuba/menangkap untuk menangkap kesilapan adalah kaedah yang disyorkan, dengan struktur yang jelas dan boleh mengendalikan pengecualian dalam menanti; 2. Kesilapan mengendalikan dalam rantaian panggilan boleh menjadi logik berpusat, yang sesuai untuk proses pelbagai langkah; 3. Gunakan .catch () untuk menangkap kesilapan selepas memanggil fungsi async, yang sesuai untuk senario kombinasi janji; 4. Dengarkan peristiwa yang tidak diingini untuk merakam penolakan yang tidak dialami sebagai barisan pertahanan terakhir; Kaedah di atas bersama -sama memastikan bahawa kesilapan asynchronous ditangkap dengan betul dan diproses.

Maya DOM adalah konsep pengaturcaraan yang mengoptimumkan kemas kini DOM sebenar. Dengan mewujudkan struktur pokok yang sepadan dengan DOM sebenar dalam ingatan, ia mengelakkan operasi DOM yang kerap dan langsung. Prinsip terasnya ialah: 1. Menjana DOM maya baru apabila data berubah; 2. Cari perbezaan terkecil antara dom maya baru dan lama; 3. Kemas kini batch DOM sebenar untuk mengurangkan overhead penyusunan semula dan redrawing. Di samping itu, dengan menggunakan kunci stabil yang unik dapat meningkatkan kecekapan perbandingan senarai, sementara beberapa rangka kerja moden telah mengadopsi teknologi lain untuk menggantikan DOM maya.

Skop JavaScript menentukan skop kebolehcapaian pembolehubah, yang dibahagikan kepada skop global, fungsi dan tahap blok; Konteks menentukan arah ini dan bergantung kepada kaedah panggilan fungsi. 1. Skop termasuk skop global (boleh diakses di mana sahaja), skop fungsi (hanya sah dalam fungsi), dan skop peringkat blok (biarkan dan const sah dalam {}). 2. Konteks pelaksanaan mengandungi objek pembolehubah, rantaian skop dan nilai -nilai ini. Ini menunjukkan kepada global atau tidak ditentukan dalam fungsi biasa, kaedah panggilan kaedah ke objek panggilan, pembina menunjuk ke objek baru, dan juga boleh ditentukan secara jelas oleh panggilan/memohon/mengikat. 3. Penutupan merujuk kepada fungsi mengakses dan mengingati pembolehubah skop luaran. Mereka sering digunakan untuk enkapsulasi dan cache, tetapi boleh menyebabkan

Nota: 1. Gunakan fungsi biasa untuk memastikan bahawa ini menunjukkan elemen; 2. Gunakan fungsi yang sama untuk merujuknya apabila tidak menentu. Dalam JavaScript, Element.AddeventListener (EventType, HandlerFunction, Options) digunakan sebagai peristiwa mengikat elemen, dan menyokong fungsi pemprosesan multi-pemprosesan dan tidak menimpa mereka. Sebagai contoh, btn.addeventListener ('klik', fungsi () {}); Ini dalam fungsi normal menunjuk kepada elemen itu sendiri, dan fungsi anak panah mewarisi skop luar, jadi fungsi biasa harus dipilih apabila ini terlibat; Sekiranya perlu membuangnya
