Skip to content

ofek-avi/ethio-food

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

74 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Ethio Food

ืคืœื˜ืคื•ืจืžื” ืงื”ื™ืœืชื™ืช ืœืฉื™ืชื•ืฃ, ื—ื™ืคื•ืฉ ื•ื ื™ื”ื•ืœ ืžืชื›ื•ื ื™ื ืžื”ืžื˜ื‘ื— ื”ืืชื™ื•ืคื™.
ื”ืžืขืจื›ืช ื ื‘ื ืชื” ื›ื“ื™ ืœืฉืžืจ ื™ื“ืข ืงื•ืœื™ื ืจื™, ืœืืคืฉืจ ืœืžืฉืชืžืฉื™ื ืœื”ืขืœื•ืช ืžืชื›ื•ื ื™ื ืขื ืชืžื•ื ื•ืช, ื•ืœื ื”ืœ ืชื”ืœื™ืš ืื™ืฉื•ืจ ืœืคื ื™ ืคืจืกื•ื ื”ืžืชื›ื•ื ื™ื ืœื›ืœืœ ื”ืžืฉืชืžืฉื™ื.

ืชื•ื›ืŸ ืขื ื™ื™ื ื™ื

ืขืœ ื”ืคืจื•ื™ืงื˜

Ethio Food ื”ื•ื ื™ื™ืฉื•ื Full Stack ื”ืžื‘ื•ืกืก ืขืœ React ื‘ืฆื“ ื”ืœืงื•ื— ื•-Express ื‘ืฆื“ ื”ืฉืจืช.
ื”ืžืขืจื›ืช ืžืืคืฉืจืช ืฆืคื™ื™ื” ื‘ืžืชื›ื•ื ื™ื, ืกื™ื ื•ืŸ ืœืคื™ ืงื˜ื’ื•ืจื™ื•ืช, ื—ื™ืคื•ืฉ, ื”ืจืฉืžื” ื•ื”ืชื—ื‘ืจื•ืช, ื”ืขืœืืช ืžืชื›ื•ื ื™ื ืื™ืฉื™ื™ื, ื›ืชื™ื‘ืช ืชื’ื•ื‘ื•ืช ื•ื ื™ื”ื•ืœ ืžืชื›ื•ื ื™ื ืขืœ ื™ื“ื™ ืžื ื”ืœ.

ื”ืคืจื•ื™ืงื˜ ืฉื ื“ื’ืฉ ืขืœ:

  • ืฉื™ืžื•ืจ ืžืชื›ื•ื ื™ื ื•ืžืกื•ืจืช ืงื•ืœื™ื ืจื™ืช ืฉืœ ื”ืงื”ื™ืœื” ื”ืืชื™ื•ืคื™ืช.
  • ื—ื•ื•ื™ื™ืช ืžืฉืชืžืฉ ืคืฉื•ื˜ื” ื‘ืขื‘ืจื™ืช.
  • ื”ืคืจื“ื” ื‘ื™ืŸ ืœืงื•ื—, ืฉืจืช, ื‘ืกื™ืก ื ืชื•ื ื™ื ื•ืื™ืžื•ืช ืžืฉืชืžืฉื™ื.
  • ื”ืจืฉืื•ืช ื‘ืกื™ืกื™ื•ืช ืœืžืฉืชืžืฉื™ื ืจื’ื™ืœื™ื ื•ืœืžื ื”ืœื™ ืžืขืจื›ืช.

ืชืฆื•ื’ื” ืžื”ืืคืœื™ืงืฆื™ื”

ืžืกืš ื”ื‘ื™ืช ืฉืœ Ethio Food

ื“ืฃ ื”ื‘ื™ืช ืฉืœ ื”ืžืขืจื›ืช, ื›ื•ืœืœ ืชืฆื•ื’ืช ืื•ื›ืœ ืžืกื•ืจืชื™ืช ื•ื›ื ื™ืกื” ืžื”ื™ืจื” ืœืงื˜ื’ื•ืจื™ื•ืช ื”ืžืชื›ื•ื ื™ื.

ื›ืจื˜ื™ืกื™ ืงื˜ื’ื•ืจื™ื•ืช ืžืชื›ื•ื ื™ื

ืกื™ื ื•ืŸ ืžืชื›ื•ื ื™ื ืœืคื™ ืงื˜ื’ื•ืจื™ื•ืช ืžืจื›ื–ื™ื•ืช: ื‘ืฉืจื™, ื—ืœื‘ื™, ื˜ื‘ืขื•ื ื™ ื•ืฆืžื—ื•ื ื™.

ื™ื›ื•ืœื•ืช ืžืจื›ื–ื™ื•ืช

  • ืฆืคื™ื™ื” ื‘ื›ืœ ื”ืžืชื›ื•ื ื™ื ืฉืื•ืฉืจื• ืœืคืจืกื•ื.
  • ื—ื™ืคื•ืฉ ืžืชื›ื•ื ื™ื ืœืคื™ ืฉื, ืžืงื•ืจ, ืžืฆืจื›ื™ื, ื”ื•ืจืื•ืช ื•ื”ืขืจื•ืช.
  • ืกื™ื ื•ืŸ ืžืชื›ื•ื ื™ื ืœืคื™ ืงื˜ื’ื•ืจื™ื•ืช: ื‘ืฉืจื™, ื—ืœื‘ื™, ื˜ื‘ืขื•ื ื™ ื•ืฆืžื—ื•ื ื™.
  • ืขืžื•ื“ ืคืจื˜ื™ื ืžืœื ืœื›ืœ ืžืชื›ื•ืŸ, ื›ื•ืœืœ ืชืžื•ื ื”, ืžืฆืจื›ื™ื, ื”ื•ืจืื•ืช ื”ื›ื ื”, ื”ืขืจื•ืช ื•ืชื’ื•ื‘ื•ืช.
  • ืชืฆื•ื’ืช ืชื’ื•ื‘ื•ืช ื‘ืกื’ื ื•ืŸ ืฆ'ืื˜: ื›ืœ ืชื’ื•ื‘ื” ืžื•ืฆื’ืช ื‘ืžืกื’ืจืช ื ืคืจื“ืช ืขื ืฉื ื”ืžื’ื™ื‘, ืชืืจื™ืš ื•ืฉืขืช ื›ืชื™ื‘ื”.
  • ื”ืจืฉืžื” ื•ื”ืชื—ื‘ืจื•ืช ื‘ืืžืฆืขื•ืช Firebase Authentication.
  • ื”ืขืœืืช ืžืชื›ื•ืŸ ื—ื“ืฉ ืขื ืชืžื•ื ื”, ืงื˜ื’ื•ืจื™ื” ื•ื–ืžื ื™ ืื›ื™ืœื” ืžื•ืžืœืฆื™ื.
  • ืื–ื•ืจ ืื™ืฉื™ ืœืžืฉืชืžืฉื™ื: ืฆืคื™ื™ื”, ืขืจื™ื›ื” ื•ืžื—ื™ืงื” ืฉืœ ื”ืžืชื›ื•ื ื™ื ืฉืœื”ื.
  • ืื–ื•ืจ ื ื™ื”ื•ืœ ืœืžื ื”ืœื™ื: ืฆืคื™ื™ื” ื‘ื›ืœ ื”ืžืชื›ื•ื ื™ื, ืื™ืฉื•ืจ ืžืชื›ื•ื ื™ื ืฉืžืžืชื™ื ื™ื ืœืคืจืกื•ื ื•ืžื—ื™ืงื” ืžื›ืœ ืชืคืจื™ื˜.
  • ืฉืžื™ืจืช ื ืชื•ื ื™ื ื‘-MongoDB.
  • ื”ืขืœืืช ืชืžื•ื ื•ืช ืœืฉืจืช ืขื ื‘ื“ื™ืงื•ืช ืกื•ื’ ืงื•ื‘ืฅ ื•ื’ื•ื“ืœ ืงื•ื‘ืฅ.
  • ืขืžื•ื“ 404 ื™ื“ื™ื“ื•ืชื™ ื‘ืขื‘ืจื™ืช ืขื‘ื•ืจ ื›ืชื•ื‘ื•ืช ืœืงื•ื— ืฉืœื ืงื™ื™ืžื•ืช.

ื˜ื›ื ื•ืœื•ื’ื™ื•ืช

Client

  • React 17
  • Vite
  • React Router ืขื HashRouter ืœืฉืžื™ืจืช ื ืชื™ื‘ื™ื ื‘ื–ืžืŸ ืจืขื ื•ืŸ
  • Axios
  • React Icons
  • React Spinners

Server

  • Node.js
  • Express
  • MongoDB
  • Firebase Identity Toolkit
  • Multer
  • CORS
  • dotenv

ืžื‘ื ื” ื”ืคืจื•ื™ืงื˜

ethio-food-main/
โ”œโ”€โ”€ app.js                 # ื”ื’ื“ืจืช ืฉืจืช Express, CORS ื•ื ืชื™ื‘ื™ API
โ”œโ”€โ”€ auth.js                # ืื™ืžื•ืช Firebase ื•ื”ืจืฉืื•ืช ืžืฉืชืžืฉื™ื
โ”œโ”€โ”€ db.js                  # ื—ื™ื‘ื•ืจ ืœ-MongoDB
โ”œโ”€โ”€ uploadConfig.js        # ื”ื’ื“ืจืช ืชื™ืงื™ื™ืช ื”ืขืœืื•ืช, ื›ื•ืœืœ ืชืžื™ื›ื” ื‘-UPLOAD_DIR
โ”œโ”€โ”€ utilies.js             # ืœื•ื’ื™ืงืช ืžืชื›ื•ื ื™ื, ืชืžื•ื ื•ืช, ืชื’ื•ื‘ื•ืช ื•ืื™ืฉื•ืจื™ื
โ”œโ”€โ”€ render.yaml            # Blueprint ืœืคืจื™ืกืช API ื•-Static Site ื‘-Render
โ”œโ”€โ”€ routes/
โ”‚   โ””โ”€โ”€ index.js           # ื ืชื™ื‘ื™ ื”ืžืชื›ื•ื ื™ื, ื”ืชืžื•ื ื•ืช, ื”ืชื’ื•ื‘ื•ืช ื•ื”ื ื™ื”ื•ืœ
โ”œโ”€โ”€ uploads/               # ืชืžื•ื ื•ืช ืฉื”ื•ืขืœื• ื“ืจืš ื”ืžืขืจื›ืช
โ”œโ”€โ”€ client/
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ pages/         # ืขืžื•ื“ื™ ื”ืืคืœื™ืงืฆื™ื”
โ”‚   โ”‚   โ”œโ”€โ”€ components/    # ืจื›ื™ื‘ื™ ืžืžืฉืง ืžืฉืชืžืฉ
โ”‚   โ”‚   โ””โ”€โ”€ api.js         # ื”ื’ื“ืจืช API ื•ืื™ืžื•ืช ื‘ืฆื“ ื”ืœืงื•ื—
โ”‚   โ”œโ”€โ”€ public/
โ”‚   โ””โ”€โ”€ package.json
โ””โ”€โ”€ package.json           # ืชืœื•ืช ื•ืคืงื•ื“ื•ืช ืฆื“ ืฉืจืช

ื”ืชืงื ื” ื•ื”ืจืฆื” ืžืงื•ืžื™ืช

ื“ืจื™ืฉื•ืช ืžืงื“ื™ืžื•ืช

  • Node.js ื‘ื’ืจืกื” 16.20.0 ื•ืžืขืœื”.
  • npm.
  • MongoDB ื–ืžื™ืŸ ื‘ืขื ืŸ ืื• ืžืงื•ืžื™ืช.
  • ืคืจื•ื™ืงื˜ Firebase ืคืขื™ืœ ืขื‘ื•ืจ ื”ืจืฉืžื” ื•ื”ืชื—ื‘ืจื•ืช.

ื”ืชืงื ืช ืฆื“ ืฉืจืช

npm install

ืฆืจื• ืงื•ื‘ืฅ .env ื‘ืชื™ืงื™ื™ืช ื”ืฉื•ืจืฉ ื•ื”ื’ื“ื™ืจื• ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื”ื“ืจื•ืฉื™ื. ืคื™ืจื•ื˜ ืžืœื ืžื•ืคื™ืข ื‘ืกืขื™ืฃ ืžืฉืชื ื™ ืกื‘ื™ื‘ื”.

ื”ืจืฆืช ื”ืฉืจืช:

npm run dev

ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ื”ืฉืจืช:

http://localhost:3001

ื‘ื“ื™ืงืช ืชืงื™ื ื•ืช:

http://localhost:3001/health

ื”ืชืงื ืช ืฆื“ ืœืงื•ื—

ืคืชื—ื• ื˜ืจืžื™ื ืœ ื ื•ืกืฃ:

cd client
npm install

ืฆืจื• ืงื•ื‘ืฅ .env ื‘ืชื•ืš ืชื™ืงื™ื™ืช client ื•ื”ื’ื“ื™ืจื• ืืช ื›ืชื•ื‘ืช ื”-API:

VITE_API_URL=http://localhost:3001

ื”ืจืฆืช ื”ืœืงื•ื—:

npm start

ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ Vite:

http://localhost:5173

ืคืงื•ื“ื•ืช ืฉื™ืžื•ืฉื™ื•ืช

# Server
npm start
npm run dev

# Client
cd client
npm start
npm run build
npm test
npm run preview

ืžืฉืชื ื™ ืกื‘ื™ื‘ื”

Server .env

PORT=3001
MONGODB_URL=<your-mongodb-connection-string>
MONGODB_DB_NAME=ethyopianfood
CLIENT_ORIGINS=http://localhost:5173
FIREBASE_API_KEY=<your-firebase-api-key>
ADMIN_EMAILS=admin@example.com,another-admin@example.com
UPLOAD_DIR=/opt/render/project/src/uploads
ืžืฉืชื ื” ื—ื•ื‘ื” ื”ืกื‘ืจ
PORT ืœื ื”ืคื•ืจื˜ ืฉืขืœื™ื• ืฉืจืช ื”-API ื™ืจื•ืฅ. ื‘ืจื™ืจืช ืžื—ื“ืœ: 3001.
MONGODB_URL ื›ืŸ ื›ืชื•ื‘ืช ื”ืชื—ื‘ืจื•ืช ืœ-MongoDB.
MONGODB_DB_NAME ืœื ืฉื ื‘ืกื™ืก ื”ื ืชื•ื ื™ื. ื‘ืจื™ืจืช ืžื—ื“ืœ: ethyopianfood.
CLIENT_ORIGINS ืžื•ืžืœืฅ ืจืฉื™ืžืช ื›ืชื•ื‘ื•ืช ืœืงื•ื— ืฉืžื•ืจืฉื•ืช ืœืคื ื•ืช ืœืฉืจืช, ืžื•ืคืจื“ื•ืช ื‘ืคืกื™ืงื™ื.
FIREBASE_API_KEY ื›ืŸ ืžืคืชื— Firebase ื”ืžืฉืžืฉ ืœืื™ืžื•ืช ืืกื™ืžื•ื ื™ ืžืฉืชืžืฉื™ื.
ADMIN_EMAILS ืœื ืจืฉื™ืžืช ื›ืชื•ื‘ื•ืช ืื™ืžื™ื™ืœ ืฉืœ ืžื ื”ืœื™ื, ืžื•ืคืจื“ื•ืช ื‘ืคืกื™ืงื™ื.
UPLOAD_DIR ืœื ืชื™ืงื™ื™ืช ืฉืžื™ืจืช ืชืžื•ื ื•ืช ืฉื”ื•ืขืœื•. ื‘ืจื™ืจืช ืžื—ื“ืœ: uploads ื‘ืชื•ืš ื”ืฉืจืช. ื‘-Render ืžื•ืžืœืฅ ืœื—ื‘ืจ ืœืชื™ืงื™ื™ื” ื–ื• Persistent Disk.

Client client/.env

VITE_API_URL=http://localhost:3001
VITE_FIREBASE_API_KEY=<your-firebase-api-key>

ื”ืคืจื•ื™ืงื˜ ืชื•ืžืš ื’ื ื‘ืฉืžื•ืช ื”ื™ืฉื ื™ื REACT_APP_API_URL ื•-REACT_APP_FIREBASE_API_KEY, ืืš ื‘ืคืจื•ื™ืงื˜ Vite ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ืžืฉืชื ื™ื ืฉืžืชื—ื™ืœื™ื ื‘-VITE_.

API ืžืจื›ื–ื™

Method Endpoint ื”ืจืฉืื” ืชื™ืื•ืจ
GET /health ืฆื™ื‘ื•ืจื™ ื‘ื“ื™ืงืช ืชืงื™ื ื•ืช ืœืฉืจืช.
GET /recipes ืฆื™ื‘ื•ืจื™ ืฉืœื™ืคืช ืžืชื›ื•ื ื™ื ืฉืื•ืฉืจื• ืœืคืจืกื•ื.
GET /recipes?includePending=true ืžื ื”ืœ ืฉืœื™ืคืช ื›ืœ ื”ืžืชื›ื•ื ื™ื, ื›ื•ืœืœ ืžืชื›ื•ื ื™ื ืฉืžืžืชื™ื ื™ื ืœืื™ืฉื•ืจ.
GET /recipe/:id ืฆื™ื‘ื•ืจื™ / ื‘ืขืœื™ื / ืžื ื”ืœ ืฉืœื™ืคืช ืžืชื›ื•ืŸ ื‘ื•ื“ื“.
GET /categories/:category ืฆื™ื‘ื•ืจื™ ืฉืœื™ืคืช ืžืชื›ื•ื ื™ื ืœืคื™ ืงื˜ื’ื•ืจื™ื”.
GET /image/:newFileName ืฆื™ื‘ื•ืจื™ ืฉืœื™ืคืช ืชืžื•ื ื” ืฉื”ื•ืขืœืชื” ืœืฉืจืช.
POST /recipe ืžืฉืชืžืฉ ืžื—ื•ื‘ืจ ื™ืฆื™ืจืช ืžืชื›ื•ืŸ ื—ื“ืฉ ืขื ืชืžื•ื ื”.
PATCH /recipe/:id ืžืฉืชืžืฉ ืžื—ื•ื‘ืจ ืขื“ื›ื•ืŸ ืžืชื›ื•ืŸ ืื• ื”ื•ืกืคืช ืชื’ื•ื‘ื”. ืชื’ื•ื‘ื•ืช ืœืžืชื›ื•ืŸ ืฉืžืžืชื™ืŸ ืœืื™ืฉื•ืจ ืžื•ืชืจื•ืช ืจืง ืœื‘ืขืœื™ื ืื• ืœืžื ื”ืœ.
DELETE /recipe/:id ื‘ืขืœื™ื / ืžื ื”ืœ ืžื—ื™ืงืช ืžืชื›ื•ืŸ.
GET /recipe/user/:localId ื‘ืขืœื™ื / ืžื ื”ืœ ืฉืœื™ืคืช ื”ืžืชื›ื•ื ื™ื ืฉืœ ืžืฉืชืžืฉ ืžืกื•ื™ื.
PATCH /recipeApprove/:id ืžื ื”ืœ ืื™ืฉื•ืจ ืžืชื›ื•ืŸ ืœืคืจืกื•ื.

ื‘ืงืฉื•ืช ืฉืžืฆืจื™ื›ื•ืช ืžืฉืชืžืฉ ืžื—ื•ื‘ืจ ืฆืจื™ื›ื•ืช ืœื›ืœื•ืœ ื›ื•ืชืจืช:

Authorization: Bearer <firebase-id-token>

ืžื‘ื ื” ืชื’ื•ื‘ื•ืช

ืชื’ื•ื‘ื•ืช ื—ื“ืฉื•ืช ื ืฉืžืจื•ืช ื‘ืžืชื›ื•ืŸ ื›ืžืขืจืš ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื. ื›ืš ืืคืฉืจ ืœื”ืฆื™ื’ ืœื›ืœ ืชื’ื•ื‘ื” ื’ื ืืช ื”ืชื•ื›ืŸ, ื’ื ืืช ืฉื ื”ืžื’ื™ื‘ ื•ื’ื ืืช ื–ืžืŸ ื”ื›ืชื™ื‘ื”:

comments: [
  {
    text: "ืชื’ื•ื‘ื” ืœื“ื•ื’ืžื”",
    authorName: "yakov133",
    authorId: "firebase-user-id",
    createdAt: "2026-06-21T19:59:19.796Z"
  }
]

ื”ืฉืจืช ื™ื•ืฆืจ ืืช ื”ืฉื“ื•ืช ื”ืืœื” ื‘ื–ืžืŸ ื”ื•ืกืคืช ืชื’ื•ื‘ื”:

  • text ื”ื•ื ืชื•ื›ืŸ ื”ืชื’ื•ื‘ื” ืฉื”ืžืฉืชืžืฉ ื›ืชื‘.
  • authorName ื ื•ืฆืจ ืžื”ื—ืœืง ื”ืจืืฉื•ืŸ ืฉืœ ื›ืชื•ื‘ืช ื”ืžื™ื™ืœ ืœืคื ื™ ื”ืกื™ืžืŸ @.
  • authorId ื ืฉืžืจ ืœืคื™ ืžื–ื”ื” ื”ืžืฉืชืžืฉ ื”ืžืื•ืžืช.
  • createdAt ื ื•ืฆืจ ื‘ืฆื“ ื”ืฉืจืช ื›ื“ื™ ืฉื”ื–ืžืŸ ืœื ื™ื™ืงื‘ืข ืขืœ ื™ื“ื™ ื”ื“ืคื“ืคืŸ.

ืขืžื•ื“ ืคืจื˜ื™ ื”ืžืชื›ื•ืŸ ืชื•ืžืš ื’ื ื‘ืชื’ื•ื‘ื•ืช ื™ืฉื ื•ืช ืฉื ืฉืžืจื• ื‘ืขื‘ืจ ื›ื˜ืงืกื˜ ืคืฉื•ื˜, ื›ื“ื™ ืœืžื ื•ืข ืฉื‘ื™ืจื” ืื ื ืฉืืจ ืžื™ื“ืข ื™ืฉืŸ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื.

ื”ืขืœืืช ืชืžื•ื ื•ืช

ื”ืžืขืจื›ืช ืชื•ืžื›ืช ื‘ื”ืขืœืืช ืชืžื•ื ื” ืื—ืช ืœื›ืœ ืžืชื›ื•ืŸ:

  • ืกื•ื’ื™ ืงื‘ืฆื™ื ืžื•ืชืจื™ื: jpg, png, webp, gif.
  • ื’ื•ื“ืœ ืžืงืกื™ืžืœื™: 5MB.
  • ืฉืžื•ืช ื”ืงื‘ืฆื™ื ื ื•ืฆืจื™ื ื‘ืฆื“ ื”ืฉืจืช ื›ื“ื™ ืœืžื ื•ืข ืฉื™ืžื•ืฉ ื‘ืฉื ืงื•ื‘ืฅ ืœื ื‘ื˜ื•ื—.
  • ืื ืžื’ื“ื™ืจื™ื UPLOAD_DIR, ื”ืฉืจืช ื™ืฉืžื•ืจ ื•ื™ืงืจื ืชืžื•ื ื•ืช ืžืื•ืชื” ืชื™ืงื™ื™ื” ืžื•ื’ื“ืจืช, ื‘ืœื™ ืœืฉื ื•ืช ืืช ื›ืชื•ื‘ื•ืช ื”-API.

ื‘ื“ื™ืงื•ืช ื•ืื™ื›ื•ืช

ื”ืคืจื•ื™ืงื˜ ื›ื•ืœืœ ื‘ื“ื™ืงื•ืช ื‘ืกื™ืกื™ื•ืช ืœืฆื“ ื”ืœืงื•ื—:

  • ื‘ื“ื™ืงื” ืฉื”ื ื™ื•ื•ื˜ ื”ืฆื™ื‘ื•ืจื™ ื ื˜ืขืŸ.
  • ื‘ื“ื™ืงื” ืฉื ืชื™ื‘ ืœืงื•ื— ืœื ืงื™ื™ื ืžืฆื™ื’ ืืช ืขืžื•ื“ PageNotFound.
  • ื‘ื“ื™ืงื” ืฉื›ืคืชื•ืจ ืžื—ื™ืงื” ืฉืœ ืžื ื”ืœ ืžื•ืกืชืจ ืžืžืฉืชืžืฉ ืจื’ื™ืœ.
  • ื‘ื“ื™ืงื” ืฉื›ืคืชื•ืจ ืžื—ื™ืงื” ืฉืœ ืžื ื”ืœ ืžื•ืฆื’ ืœืžืฉืชืžืฉ ืžื ื”ืœ.
  • ื‘ื“ื™ืงื” ืฉืขืžื•ื“ ืคืจื˜ื™ ืžืชื›ื•ืŸ ืžืฆื™ื’ ืชื’ื•ื‘ื” ืขื ืฉื ืžื’ื™ื‘, ืชืืจื™ืš ื•ืฉืขืช ื›ืชื™ื‘ื”.

ืคืงื•ื“ื•ืช ื‘ื“ื™ืงื” ืžื•ืžืœืฆื•ืช:

# Client tests
cd client
npm test
npm run build

# Server syntax checks
cd ..
node --check app.js
node --check routes/index.js
node --check utilies.js
node --check auth.js

ืคืจื™ืกื”

ื ื™ืชืŸ ืœืคืจื•ืก ืืช ื”ืคืจื•ื™ืงื˜ ื›ืฉื ื™ ืฉื™ืจื•ืชื™ื ื ืคืจื“ื™ื:

API Server

ื”ื’ื“ืจื” ืžื•ืžืœืฆืช ื‘ืฉื™ืจื•ืช ืขื ืŸ ื›ืžื• Render ืื• Heroku:

npm install
npm start

ื™ืฉ ืœื”ื’ื“ื™ืจ ื‘ืกื‘ื™ื‘ืช ื”ืขื ืŸ ืืช ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืฉืœ ืฆื“ ื”ืฉืจืช, ื‘ืžื™ื•ื—ื“:

  • MONGODB_URL
  • CLIENT_ORIGINS
  • FIREBASE_API_KEY
  • ADMIN_EMAILS
  • UPLOAD_DIR ืื ืžื—ื‘ืจื™ื Persistent Disk ืœืฉืžื™ืจืช ืชืžื•ื ื•ืช ืœืื•ืจืš ื–ืžืŸ

Client

ื”ื’ื“ืจื” ืžื•ืžืœืฆืช ื›-Static Site:

cd client
npm install
npm run build

ืชื™ืงื™ื™ืช ื”ืคืจืกื•ื:

client/build

ื”ืœืงื•ื— ืžืฉืชืžืฉ ื‘-HashRouter, ื•ืœื›ืŸ ื›ืชื•ื‘ื•ืช ืคื ื™ืžื™ื•ืช ื ืฉืžืจื•ืช ืื—ืจื™ ื”ืกื™ืžืŸ #. ืœื“ื•ื’ืžื”:

https://ethio-food.onrender.com/#/Details/<recipe-id>
https://ethio-food.onrender.com/#/Categories/Meat

ื‘ืฆื•ืจื” ื”ื–ืืช ืจืขื ื•ืŸ ื‘ื“ืคื“ืคืŸ ืžื‘ืงืฉ ืžื”ืฉืจืช ืจืง ืืช /, ื•-React Router ืžืžืฉื™ืš ืœื˜ืขื•ืŸ ืืช ื”ืขืžื•ื“ ื”ื ื›ื•ืŸ ื‘ืฆื“ ื”ืœืงื•ื—.

ืื ืขื•ื‘ืจื™ื ื‘ืขืชื™ื“ ื‘ื—ื–ืจื” ืœ-BrowserRouter, ืฆืจื™ืš ืฉื›ืชื•ื‘ื•ืช ืคื ื™ืžื™ื•ืช ื›ืžื• /Details/:id, /Categories/:category ื•ื ืชื™ื‘ื™ื ืœื ืงื™ื™ืžื™ื ื™ื™ื˜ืขื ื• ื“ืจืš React Router. ื‘ืžืงืจื” ื›ื–ื” ื™ืฉ ืœื”ื’ื“ื™ืจ Rewrite ื‘-Static Site:

Source: /*
Destination: /index.html

ืื ื”ืฉื™ืจื•ืช ื‘-Render ืœื ื ื•ืฆืจ ืžืชื•ืš render.yaml, ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืืช ืื•ืชื• ื›ืœืœ ื™ื“ื ื™ืช ื‘ื“ืฉื‘ื•ืจื“ ืฉืœ Render ืชื—ืช ื”ื’ื“ืจื•ืช ื”-Static Site. ื‘ืœื™ ื”ื›ืœืœ ื”ื–ื”, BrowserRouter ืขืœื•ืœ ืœื”ื—ื–ื™ืจ Not Found ื‘ื›ื ื™ืกื” ื™ืฉื™ืจื” ืœื ืชื™ื‘ ื›ืžื• /fssdasd. ื”ืฉื™ืžื•ืฉ ื”ื ื•ื›ื—ื™ ื‘-HashRouter ืžื•ื ืข ืืช ื”ื‘ืขื™ื” ื”ื–ืืช ื‘ืจืขื ื•ืŸ, ื›ื™ ื”ื ืชื™ื‘ ื ืฉืืจ ื‘ืฆื“ ื”ื“ืคื“ืคืŸ ืื—ืจื™ #.

ื‘ืคืจื™ืกื” ื™ืฉ ืœื”ื’ื“ื™ืจ:

VITE_API_URL=<production-api-url>
VITE_FIREBASE_API_KEY=<firebase-api-key>

ืฆื•ื•ืช ื”ืคื™ืชื•ื—

  • Yakov Kassa
  • Ofek Saadon

ื”ืคืจื•ื™ืงื˜ ื ื‘ื ื” ื›ื—ืœืง ืžืชื”ืœื™ืš ืœืžื™ื“ื” ื•ืคื™ืชื•ื— Full Stack, ืขื ื“ื’ืฉ ืขืœ ืฉื™ืžื•ืจ ื•ืฉื™ืชื•ืฃ ืžืชื›ื•ื ื™ื ืžื”ืžื˜ื‘ื— ื”ืืชื™ื•ืคื™.

About

repo that will go online with onrender.com

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 80.4%
  • CSS 18.8%
  • HTML 0.8%