لمذا git لا يرفع ملفات الخادم حيث اني قمت ببناء تطبيق في ملفين server client ولكن عند انشاء مستودع git تم رفع ملفات العميل فقط على جيت هب ولم يرفع ملفات الخادم
جربت اخراج ملف .gitignore ليكون عام اي خارج ملفات كلها ولم ينج الامر
import ex from 'express';
import dotenv from 'dotenv';
import { connectDB } from './config/db.js';
import router from './routes/routes.js';
import cors from 'cors'
import path from 'path';
dotenv.config();
const app = ex();
const port = 3000;
app.use(ex.json());
//app.use(cors());
app.use('/api/todos' , router);
const _dirname = path.resolve();
if(process.env.NODE_ENV === "production"){
app.use(ex.static(path.join(_dirname , "/client/dist")));
app.get("*splat" , (req , res) => {
res.sendFile(path.resolve(_dirname , "client" , "dist" , "index.html"))
});
}
app.listen(port , () => {
connectDB();
console.log(`Server is runing on port ${port}`);
});// كود با اند
import axios from "axios";
import React, { useEffect, useState } from "react"
import { IoIosCheckmark , IoIosClose } from "react-icons/io";
import { GrEdit } from "react-icons/gr";
import { FaRegTrashAlt } from "react-icons/fa";
import toast , {Toaster} from "react-hot-toast";
import bellSound from './audio.mp3';
interface Type{
_id: string
text: string
completed: boolean
}
function App() {
const [newTodo , setNewTodo] = useState<string>('');
const [todos , setTodos] = useState<Type[]>([]);
const [editTodos , setEditTodos] = useState<string | null>(null);
const [editText , setEditText] = useState<string>('');
const addTodo = async (e:React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
if(!newTodo.trim()){
return (
toast.error("Please fill out the field")
)
}
const audio = new Audio(bellSound);
audio.play();
try{
const res = await axios.post('/api/todos', {
text: newTodo
});
setTodos([...todos, res.data]);
setNewTodo('');
}catch(e){
console.log('Error adding todo' , e);
}
}
const fetchData = async () => {
try{
const res = await axios.get('/api/todos');
setTodos(res.data);
}catch(e){
console.log('Error fetching todo:' , e)
}
}
useEffect(() => {
fetchData();
},[])
const starEditing = (todo:Type) => {
setEditTodos(todo._id)
setEditText(todo.text)
}
const saveEdit = async (id:string) => {
try{
const res = await axios.patch(`/api/todos/${id}`, {
text: editText
});
setTodos(todos.map((todo) => (
todo._id === id ? res.data : todo
)))
setEditTodos(null)
}catch(e){
console.log('Error updating todo:' , e);
}
}
const deleteTodo = async (id:string) => {
try{
await axios.delete(`/api/todos/${id}`);
setTodos(todos.filter((t) => (
t._id !== id
)));
}catch(e){
console.log('Error deleting todo:' , e);
}
}
const toggleTodo = async (id:string) => {
try{
const todo = todos.find((t) => t._id === id);
const res = await axios.patch(`/api/todos/${id}`, {
completed: !todo?.completed
})
setTodos(todos.map((t) => (
t._id === id ? res.data : t
)))
}catch(e){
console.log('Error toggline todo');
}
}
return (
<main className="flex items-center justify-center min-h-screen bg-gradient-to-r from-gray-200 to-gray-300">
<Toaster position="top-center" toastOptions={{
style: {
background: '#ccc',
padding: '20px',
fontWeight: 'bold'
}
}}/>
<div className="bg-white p-4 shadow-xl shadow-gray-500 rounded-md">
<h1 className="text-center text-gray-700 font-bold text-3xl my-6">Task Manager</h1>
<form onSubmit={addTodo} className="flex items-center gap-2 mb-5">
<input
type="text"
placeholder="Enter a task..."
value={newTodo}
onChange={(e) => setNewTodo(e.target.value)}
className="outline-none border border-blue-700 rounded-md p-2 text-gray-700"
/>
<button type="submit" className=" cursor-pointer bg-blue-600 text-white font-bold py-2 px-3 rounded-md">Add Task</button>
</form>
<div>
{todos.length === 0 ? (
<p className="font-semibold text-center p-5 text-[17px] text-gray-700">There are no missions yet.</p>
): (
<div className="flex flex-col gap-4 ">
{todos.map((todo) => (
<div key={todo._id}>
<div>
{editTodos === todo._id ? (
<div className="flex items-center gap-4">
<input
type="text"
value={editText}
onChange={(e) => setEditText(e.target.value)}
className="flex-1 border p-1"
/>
<button onClick={() => saveEdit(todo._id)} className="bg-green-500 w-7 h-7 flex justify-center items-center rounded-full text-white font-bold text-2xl"><IoIosCheckmark /></button>
<button onClick={() => setEditTodos(null)} className="bg-gray-400 w-7 h-7 flex justify-center items-center rounded-full text-white font-bold text-2xl"><IoIosClose /></button>
</div>
): (
<div className="flex justify-between items-center">
<div className="flex items-center gap-3">
<button onClick={() => toggleTodo(todo._id)} className={`border border-gray-800 w-6 h-6 flex items-center justify-center rounded-full text-[20px] ${todo.completed ? 'bg-green-500 border-green-500' : 'text-white'}`}><IoIosCheckmark /></button>
<span className="text-gray-800 font-bold">{todo.text}</span>
</div>
<div className="flex items-center gap-4">
<button className="text-blue-600 text-[20px]" onClick={() => starEditing(todo)}><GrEdit /></button>
<button onClick={() => deleteTodo(todo._id)} className="text-red-600 text-[20px]" ><FaRegTrashAlt /></button>
</div>
</div>
)}
</div>
</div>
))}
</div>
)}
</div>
</div>
</main>
)
}
export default App//كود فرونت اند
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
.env
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
{
"name": "server",
"version": "1.0.0",
"main": "index.js",
"type": "module",
"scripts": {
"dev": "node --watch index.js",
"build": "npm install && npm install --prefix client && npm run build --prefix client",
"start": "node /server/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^17.2.1",
"express": "^5.1.0",
"mongoose": "^8.18.0"
}
}
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
server:{
proxy:{
'/api/todos': {
target: 'http://localhost:3000'
}
}
}
})
ارسلت لكم الاكود ارجو مساعدة