회원가입시
아이디 비번
프로필을 등록하려했다.
id password는
넘겨주고 req.body.id로 받았는데
프로필은 formData 객체로 묶어서
그자체로 넘겨줬는데 자꾸 undefined 떴다.
formData는 req.body가 안된다길래
multer을 써봤는데도 안됨
(req.body대신 req.file 또는 files를 찍어봤지만 안됐다. )
formData쓸때 헤더에 타입을 넣어줘야한대서
뒤늦게
{
headers: {
"Content-Type": "multipart/form-data",
},
}
를 추가했다. 위치는 보내는 formdata 다음에 넣어줬다.
이걸로도 해결이 안됐는데 신기하게
같이보낸 id, password를 지우니
undefined가 안뜨고 이미지가 전송돼서 images폴더에 이미지도 담겼다!
req.file에 이미지url이 찍혔다.
import React, { useState } from "react";
import Axios from "axios";
import "./signup.css";
import FormData from "form-data";
function Signup() {
//회원가입 값
const [id, setId] = useState("");
const [password, setPassword] = useState("");
// const [imageUpload, setImageUpload] = useState(null);
const [image, setImage] = useState({
preview:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAM1BMVEXk5ueutLfn6eqrsbTp6+zg4uOwtrnJzc/j5earsbW0uby4vcDQ09XGyszU19jd3+G/xMamCvwDAAAFLklEQVR4nO2d2bLbIAxAbYE3sDH//7WFbPfexG4MiCAcnWmnrzkjIRaD2jQMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMw5wQkHJczewxZh2lhNK/CBOQo1n0JIT74/H/qMV0Z7GU3aCcVPuEE1XDCtVLAhgtpme7H0s1N1U7QjO0L8F7llzGeh1hEG/8Lo7TUmmuSrOfns9xnGXpXxsONPpA/B6OqqstjC6Ax/0ujkNdYQQbKNi2k64qiiEZ+ohi35X+2YcZw/WujmslYewiAliVYrxgJYrdwUmwXsU+RdApUi83oNIE27YvrfB/ZPg8+BJETXnqh9CVzBbTQHgojgiCvtqU9thFJg/CKz3VIMKMEkIXxIWqIpIg2SkjYj+xC816mrJae2aiWGykxRNsW0UwiJghJDljYI5CD8GRiCtIsJxizYUPQ2pzItZy5pcisTRdk/a9m4amtNNfBuQkdVhSaYqfpNTSFGfb9GRIakrE2Pm+GFLaCQPqiu0OpWP+HMPQQcgQMiQprWXNmsVwIjQjYi/ZrhAqNTCgr2gu0Jnz85RSSjso0HkMFZ0YZjKkc26a/jlmh9JiDyDxi9oeorTYAzZkwwoMz19pzj9bnH/GP/+qbchjSGflneWYhtTuKdMOmNKZcJ5TjInQKcYXnESd/jQxy0ENpULTNGOGgxpap/oyw9pbUAqhfx2Dbkhovvfgz4iUzoM9+GlK6/Mh4q29hyC1mwro30hpVVLPF9wYQr71RazOeM5/cw81iBRD+A03aM9/C/obbrKjbYSpCmIVG3qT/Q8oeUo3Rz0IL7vI1tEbCB9pSiu8I/aV8x3Kg/BGWrWp4ZVs0nZfmAoEG4h/61yHYIJiFSl6Q0Vk6tTW1N8kYp8hdOkfHYYMXd2Qft+8CYwqYDSKvqIh+MCF8Wgca2u/cwdgeW3TtuVn6+1oBs3yLo5C2JpK6CvQzGpfUkz9UG/87gCsi5o2LIXolxN0FbwAsjOLEr+YJmXn7iR6N0BCt5p5cMxm7eAsfS+/CACQf4CTpKjzgkvr2cVarVTf96372yut7XLJ1sa7lv6VcfgYrWaxqr3Wlo1S6pvStr22sxOtTNPLzdY3nj20bPP+ejFdJYkLsjGLdtPBEbe/mr2bQKiXWJDroA+vtzc0p9aahuwqHMDYrQEXHEw9jwQl3drMpts9JBU1SdktPe5FBRdJQ6bwXBpa57ib2A8kukQDzMjh++Uo7Fo6Wd02Pkf4fknqoo4HtvAIjsqUcjx6DIPgWCaOML9rKI/oqD9/lgNrn+eF+p7j8tnzHBiR7+kdUGw/+V1Kzkc75mMy6U+FMaxjPibiM1U1uGM+puInHpmALZCgP4pt7i840MV8+0R1zPsRB6UTcqpizncYwZ89syDydfyWCwXB1l8/zRNGWbTG/GHKUm9AkxHMc/EGSk3z2+ArEhPEV5TUBLEvUGFcjEUH80J/jveTGOAJEljJbILWGQT3zRYiwuKsUXN1EEJAzBhRJFll7mBUG7KD8EqPkKekBREaL8hMDZLQSG6AQjtHPYmvTQnX0TtpC1SYCe2YdkkyLP3jj5BSbKiuR585eQhTgoje6yIb0Yb0C+mV6EYvebqw5SDy2WmubogZiF2AVxPC2FpDf8H2Q9QWo6IkjUxTWVEI3WY/wrCeSuqJ+eRWzXR/JXwgVjUMozbCOfoEZiSiKVGepqv5CJ8RyR4D7xBeamqa7z3BJ/z17JxuBPdv93d/a2Ki878MMAzDMAzDMAzDMAzDMF/KP09VUmxBAiI3AAAAAElFTkSuQmCC",
data: "",
// Headers: " 'Content-Type': 'multipart/form-data'",
});
//다 userlist에 담아서 db저장하기
// const [userList, setUserList] = useState([]);
const onChangeId = (event) => {
setId(event.target.value);
};
const onChagePassword = (event) => {
setPassword(event.target.value);
};
const Submit = (e) => {
e.preventDefault();
let formData = new FormData();
formData.append("file", image.data);
console.log(image.data, "선택한이미지! ");
console.log(formData, "들어가기전폼데이터");
Axios.post(
"http://localhost:3001/submit",
// {
// id: id,
// password: password,
// formData,
// headers: { "Content-Type": "application/x-www-form-urlencoded" },
// }
// {
// id: id,
// password: password,
// },
formData,
{
headers: {
"Content-Type": "multipart/form-data",
},
}
).then(() =>
console.log(
formData,
"then이후 폼데이터",
image,
"이건뭐",
image.data,
"이미지데이터"
)
);
};
const handleFileChange = (e) => {
const img = {
preview: URL.createObjectURL(e.target.files[0]),
data: e.target.files[0],
};
setImage(img);
};
return (
<div className="formBox">
<div className="signup_id">
<input placeholder="아이디" onChange={onChangeId}></input>
</div>
<div className="signup_password">
<input placeholder="비밀번호" onChange={onChagePassword}></input>
</div>
<div>
<input placeholder="비밀번호 확인"></input>
</div>
{image.preview && <img src={image.preview} width="100" height="100" />}
<input
type="file"
onChange={handleFileChange}
name="Images"
accept="Images/*"
/>
<button onClick={Submit}>제출</button>
</div>
);
}
export default Signup;
const express = require("express");
const app = express();
const mysql = require("mysql");
const cors = require("cors");
const multer = require("multer");
const path = require("path");
app.use(cors());
app.use(express.json());
//이거 필요한거임?
app.use(express.static("Images"));
const db = mysql.createConnection({
user: "*",
host: "*",
password: "*",
database: "*",
});
const upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "Images/");
},
filename: function (req, file, cb) {
cb(null, new Date().valueOf() + path.extname(file.originalname));
},
}),
});
// const upload = multer({
// dest: "Images/",
// limits: { fileSize: 5 * 1024 * 1024 },
// });
// app.post("/up", upload.array("img"), (req, res) => {
// console.log(req.files);
// });
app.post("/submit", upload.single("file"), (req, res) => {
console.log(req.files, "레큐파일ㄴ");
console.log(req.body, "레큐바디");
// console.log(req.body, "레큐바디");
// const id = req.body.id;
// const password = req.body.password;
const profile = req.file;
console.log(req.file, "파일");
// res.json({ url: `/img/${req.file.filename}` });
// FormData의 경우 req로 부터 데이터를 얻을수 없다.
// upload 핸들러(multer)를 통해서 데이터를 읽을 수 있다
// function insertRecord(req, res) {
// req.files.forEach((e) => {
// // console.log(e.filename);
// // });
// console.log(req.file, "파일");
// console.log(profile, "이미지");
db.query(
"INSERT INTO userlist (userProfile) VALUES (?) ",
[profile],
(err, result) => {
if (err) {
console.log(err);
} else {
res.send("userlist values inserted");
}
}
);
});
app.listen(3001, () => {
console.log("your server is running on 3001~! yeah");
});
문제는 id랑 password를 빼고 보내서 그런지
Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1
오류: ER_WRONG_VALUE_COUNT_ON_ROW: 열 개수가 행 1의 값 개수와 일치하지 않습니다.
이게 뜬다
아직 db저장도 안됐고 해결안된게 많지만 이미지를 받아서 행복함...
id랑 password를 같이 받으면 왜 undefined로 뜨는걸까?
따로 해야되는것인가..
아무튼
header의 역할 ,context Type에 대해 공부하고
https://jw910911.tistory.com/117
formData(json으로 변환하라는 얘기도 있던데...나는 그거 안되던데..왜지?), multer
에 대해 더 공부하고 정리해봐야겠다.
+
app/router차이도 헷갈리니까 확인해놓자.
http://expressjs.com/ko/guide/routing.html
express가져와서 app으로 선언해서 썼는데 검색하다가 코드보면 express.router로 쓰는 게 무슨 차인가 싶어서..
'노드 node.js' 카테고리의 다른 글
formdata로 id,password,profile(이미지) mySQL 저장 성공 (0) | 2022.05.02 |
---|---|
bodyParser써야하는 이유 (0) | 2022.05.02 |
회원가입 프로필 이미지 넣고 보이게 하기/닉네임,비밀번호 변경 (0) | 2021.10.08 |
9장 팔로우 끊기 넌적스 if로 버튼교체(follow unfollow button) (0) | 2021.10.05 |
몽고디비 MongoDB (0) | 2021.09.26 |