이름 제출
import React, { useState } from "react";
function NameForm(props) {
const [value, setValue] = useState("");
const handleChange = (event) => {
setValue(event.target.value);
};
const handleSubmit = (event) => {
console.log("입력한 이름:" + value);
event.preventDefault();
};
return (
<form action="#" onSubmit={handleSubmit}>
<label>
이름:
<input type="text" value={value} onChange={handleChange}></input>
</label>
<button type="submit">제출</button>
</form>
);
}
export default NameForm;
import React from 'react';
import ReactDOM from 'react-dom/client';
import NameForm from './11-form/NameForm';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<NameForm />);


요청사항
import React, {useState} from "react";
function RequestForm(props){
const [value, setValue] = useState("요청사항을 입력하세요.");
const handleChange = (e) => {
setValue(e.target.value);
};
const handleSubmit = (e) => {
console.log("입력한 요청사항 : " + value);
e.preventDefault();
};
return (
<form onSubmit={handleSubmit}>
<label>
요청사항 :
<textarea value={value} onChange={handleChange}></textarea>
</label>
<button type="submit">제출</button>
</form>
);
}
export default RequestForm;


회원가입
const express = require("express");
const cors = require("cors");
const app = express();
app.use(
cors({
origin: "*",
})
);
const port = 3030;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.post("/signup", (req, res) => {
console.log("req.body:" + req.body);
const { username, password, gender } = req.body;
res.status(201).json({ username, password, gender });
});
app.listen(port, () => {
console.log(`${port}번 포트에서 서버 실행 중`);
});
import React, { useState } from "react";
import axios from "axios";
function SignUpForm(props) {
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [gender, setGender] = useState("male");
const handleChangeUsername = (event) => {
setUsername(event.target.value);
};
const handleChangePassword = (event) => {
setPassword(event.target.value);
};
const handleChangeGender = (event) => {
setGender(event.target.value);
};
const handleSubmit = async (event) => {
event.preventDefault();
if (!username || !password || !gender) {
alert("Please fill in all fields.");
return;
}
try {
const response = await axios.post(
"http://localhost:3030/signup",
{
username,
password,
gender,
},
{
headers: {
"Content-Type": "application/json",
},
}
);
console.log("Success:", response.data);
alert("Sign-up successful!");
} catch (error) {
console.error("Error:", error);
alert("An error occurred during sign-up.");
}
};
return (
<form onSubmit={handleSubmit}>
<label>
사용자명:
<input type="text" value={username} onChange={handleChangeUsername} />
</label>
<br />
<label>
비밀번호:
<input
type="password"
value={password}
onChange={handleChangePassword}
/>
</label>
<br />
<label>
성별:
<select value={gender} onChange={handleChangeGender}>
<option value="male">남자</option>
<option value="female">여자</option>
</select>
</label>
<br />
<button type="submit">제출</button>
</form>
);
}
export default SignUpForm;


파일업로드
const express = require("express");
const multer = require("multer");
const path = require("path");
const fs = require("fs");
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const uploadPath = "uploads/";
if (!fs.existsSync(uploadPath)) {
fs.mkdirSync(uploadPath);
}
cb(null, uploadPath);
},
filename: (req, file, cb) => {
cb(
null,
file.fieldname + "-" + Date.now() + path.extname(file.originalname)
);
},
});
const fileFilter = (req, file, cb) => {
const allowedFileTypes = [".jpg", ".jpeg", ".png"];
if (allowedFileTypes.includes(path.extname(file.originalname))) {
cb(null, true);
} else {
cb(new Error("Invalid file type"));
}
};
const upload = multer({
storage: storage,
limits: { fileSize: 1024 * 1024 * 5 },
fileFilter: fileFilter,
});
const app = express();
const port = 3030;
const cors = require("cors");
app.use(
cors({
origin: "*",
})
);
app.use(express.static("public"));
app.post("/upload", upload.single("file"), (req, res) => {
console.log(`File uploaded: ${req.file.filename}`);
res.status(200).send("File uploaded successfully.");
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
import React from "react";
import { useState } from "react";
import axios from "axios";
function FileUpload(props) {
const [files, setFiles] = useState([]);
const handleFilesChange = (e) => {
setFiles(Array.from(e.target.files));
};
const uploadFiles = (e) => {
e.preventDefault();
const formData = new FormData();
files.map((file) => {
formData.append("file", file);
});
console.log(Array.from(formData));
axios
.post("http://localhost:3030/upload", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
})
.then((res) => {
console.log(res.data);
})
.catch((err) => {
console.error(err);
});
};
return (
<form>
<input
className="file-input"
type="file"
mulitple
onChange={handleFilesChange}
/>
<button onClick={uploadFiles}>upload</button>
</form>
);
}
export default FileUpload;