[React JS] 4. ๋ฐฑ์๋ ๊ธฐ๋ณธ๊ตฌ์กฐ ์์ฑํ๊ธฐ
1. ๋ฐฑ์๋ ๊ธฐ๋ณธ๊ตฌ์กฐ ์์ฑ
package.json ์์ฑ
npm init |
express ์ค์น
npm install express |
- index.js ๊ฐ entryํ์ผ (์ฌ๊ธฐ๋ก ์์ฒญ์ด ๋ค์ด์ด)
nodemon ์ค์น
npm install nodemon |
ํ์ผ๊ตฌ์กฐ ์์ฑ
ํ์ํ ํจํค์ง ๋ค์ด
npm install bcryptjs cors dotenv express jsonwebtoken mongoose
|
- bcrypt : ๋น๋ฒ ์ํธํ
- cors : origin ๋ ๊ฐ์์ ํต์ ๊ฐ๋ฅํ๊ฒ
- env : ํ๊ฒฝ๋ณ์ ์์ฑ ์์ฑํ๊ฑฐ ์ฌ์ฉ
- jsonwebtoken : ์ฌ์ฉ๊ฐ๋ฅ
- mongoose : mongo db ์ฌ์ฉ
2. express.static()
์ด๋ฏธ์ง, css, js ํ์ผ๊ฐ์ ์ ์ ์ธ ํ์ผ ์ ๊ณตํ๋ ค๋ฉด Express์ express.static ๋ด์ฅ ๋ฏธ๋ค์จ์ด ์ฌ์ฉ
app.use(express.static('uploads'));
// ๊ฐ์๊ฒฝ๋ก ์ง์ ๋ ๊ฐ๋ฅ
// ex) app.use('/image', express.static('๊ฒฝ๋ก'));
์๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ฌ๋จ -> ์ ๋๊ฒฝ๋ก๋ก ํด์ผํจ
app.use(express.static(path.join(__dirname, "uploads")));
3. CORS
- server์ client ํต์ --> ๊ทธ๋ฅ request ๋ณด๋ด๊ธฐ ๋ถ๊ฐ
- Same Origin Policy (SOP) ์ ์ฑ (๋ ๊ฐ์ ๋ค๋ฅธ Origin์ ๊ฐ์ง๊ณ ์๋ ์๋ฒ request ๋ถ๊ฐ)
- ํด๊ฒฐ) Cross-Origin Resource Sharing (CORS)
4. Express.json()
- ๋ฏธ๋ค์จ์ด
app.post('/', (req, res) => {
console.log(req.body);
res.json(req.body);
}
- json response๊ฐ ๋ฐ์์ค์ง ๋ชปํจ
app.use(express.json());
- ๋ฑ๋กํ๋ฉด ๊ฐ๋ฅ
5. MongoDB
- mongoDB ํ์๊ฐ์
- mongoose ์ค์น
npm install mongoose |
const dotenv = require("dotenv");
const mongoose = require("mongoose");
dotenv.config();
mongoose
.connect(process.env.MONGO_URI)
.then(() => console.log("MongoDB Connected..."))
.catch((err) => console.log(err));
6. Mongoose๋
- ๋ชฝ๊ณ DB๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ๋ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ชจ๋
- ๋ชฝ๊ตฌ์ค๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด์ Schema ํ์
- ํด๋น Schema๋ก ๋ชจ๋ธ์ ๋ง๋ฆ
- ์ ํ์ฌํญ์
๋ชฝ๊ตฌ์ค ์ฌ์ฉ๋ฐฉ๋ฒ
- ์คํค๋ง ์์ฑ
- ์คํค๋ง ์ด์ฉํด์ ๋ชจ๋ธ์ ๋ง๋ค๊ธฐ
- ๋ชจ๋ธ ์ด์ฉํด์ ๋ฐ์ดํฐ ์ ์ฅ/์ ๋ฐ์ดํธ/์ญ์ ์์ ๊ฐ๋ฅ
์คํค๋ง์์ฑ
const userSchema = mongoose.Schema({
name: {
type: String,
maxlength: 50,
},
email: {
type: String,
trim: true,
unique: true,
},
password: {
type: String,
minlength: 5,
maxlength: 90,
},
role: {
type: Number,
default: 0,
},
image: String,
});
์คํค๋ง ์ด์ฉํด์ ๋ชจ๋ธ ๋ง๋ค๊ธฐ
const User = mongoose.model("User", userSchema);
module.exports = { User };
7. Express์์ ์๋ฌ ์ฒ๋ฆฌํ๊ธฐ
- ์๋ฌ์ฒ๋ฆฌ๊ธฐ
// ์๋ฌ ๋์ง๋ ๋ฒ
app.get('/', (req, res) => {
thorw new Error('it is an error');
})
app.use((error, req, res, next) => {
res.send(error.message || '์๋ฒ์์ ์๋ฌ๊ฐ ๋ฌ์ต๋๋ค.');
})
* ๋น๋๊ธฐ ์์ฒญ์ผ๋ก ์ธํ ์๋ฌ๋ ์๋ฌ ์ฒ๋ฆฌ๊ธฐ์์ ํด๋น ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๊ฐ crash ๋จ
* ๋น๋๊ธฐ๋ก ๋ง๋๋ ๋ฒ (next ์ด์ฉ)
app.get('/', function(req, res, next) {
// Reporting async errors *must* go through 'next()'
setImmediate(() => { next() new Error('it is an error') });
})
res.status()
app.use((error, req, res, next) => {
// status ์ฝ๋๊ฐ ์์ผ๋ฉด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ, ์์ผ๋ฉด 500 ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
res.status(err.status || 500);
})
'๐จโ๐ป Web Development > React JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React JS] 6. ์ํ ์์ฑ, ๋ฉ์ธ ํ์ด์ง ์์ฑํ๊ธฐ (0) | 2023.08.17 |
---|---|
[React JS] 5. ํ์๊ฐ์ /๋ก๊ทธ์ธ/๋ก๊ทธ์์ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (0) | 2023.07.17 |
[React JS] [์ฐธ์กฐ] Redux (0) | 2023.06.22 |
[React JS] 3. ํ๋ก ํธ์๋ ๊ธฐ๋ณธ๊ตฌ์กฐ ์์ฑํ๊ธฐ (0) | 2023.06.18 |
[React JS] 2. React.js (0) | 2023.06.08 |
์ต๊ทผ๋๊ธ