5단계: 모델 사용
23676 단어 expressmongodbbeginnersjavascript
지금까지 준비할 네 단계를 완료했으며 이 단계를 수행할 준비를 합니다.
우리는 앱, Post 및 User에 대해 두 가지 모델을 설계했습니다. 데이터베이스가 성공적으로 연결되었는지 확인했습니다. 우리는 UserSchema 및 PostSchema를 작성했으며 어떤 속성이 고유해야 하는지, 기본값이 있는지, 필수 속성인지 아닌지 명시적으로 정의했습니다. 마지막으로
mongoose.model()
를 사용하여 이러한 스키마의 모델을 만들었습니다.이제 User 및 Post 모델을 마음대로 사용할 수 있으며 첫 번째 사용자를 만들 준비가 되었습니다. 그러나 먼저 앱에 몇 가지 구성을 만들고 사용자 및 게시물을 생성하기 위한 두 가지 양식을 만들어 보겠습니다.
// app.js
const path = require('path');
// set path to the views folder
app.set('views', __dirname + '/views')
// set path to the public folder
app.use(express.static(path.join(__dirname, 'public')));
// allows to parse the submitted data with the request in req.body
app.use(express.urlencoded({extended: true}))
프로젝트의 루트에 public 및 views 폴더를 만들고 views 폴더 안에 index.html 파일을 추가합니다.
<!-- views/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div class="wrapper">
<!-- 1 -->
<!-- Create a form for creating users -->
<!-- on submit it goes to /api/users/create/ -->
<form action="/api/users/create/" method="POST">
<h2>Create a New User</h2>
<label for="username">Username</label>
<input id="username" type="text" name="username" placeholder="Name"/>
<label for="email">Email</label>
<input id="email" type="text" name="email" placeholder="Email"/>
<button type="submit">Create</button>
</form>
<!-- 2 -->
<!-- Create a form for creating posts-->
<!-- on submit it goes to /api/posts/create/ -->
<form action="/api/posts/create/" method="POST">
<h2>Create new posts</h2>
<label for="title">Title</label>
<input id="title" type="text" name="title" placeholder="Title (optinal)"/>
<label for="content">Content</label>
<textarea id="content" type="text" col="25" rows="5"
name="content" placeholder="Content here" required>
</textarea>
<button type="submit">Create</button>
</form>
</div>
</body>
</html>
이제 두 가지 형식이 있습니다.
1- 새 사용자를 만들기 위한 양식입니다. 제출하면 보유하고 있는 데이터와 함께 "/api/users/create/"경로로 이동합니다.
2- 새 게시물을 작성하기 위한 양식입니다. 제출할 때 보유하고 있는 데이터와 함께 "/api/posts/create/"경로로 이동합니다.
다음으로 해당 경로를 앱에 추가해야 합니다.
// app.js
app.post("/api/users/create/", /*pass for now*/);
app.post("/api/posts/create/", /*pass for now*/);
이제
app
는 이 두 경로에 대해 알고 있지만 이전에 정의한 양식이 해당 경로로 데이터를 보낼 때 어떤 함수를 호출해야 하는지 아직 알지 못합니다. 이러한 기능을 컨트롤러라고 합니다.컨트롤러를 정의합시다
프로젝트의 루트에 컨트롤러 폴더를 생성하고 여기에 userControllers.js 및 postControllers.js 파일을 추가합니다.
// contollers/userControllers.js
// get User model from ../models/User.js
const User = require('../models/User');
// our controller for creating new users
// or the function that gets called when the form
// for creating new users is submitted
exports.createUser = (req, res)=>{
// pass for now
}
// contollers/postControllers.js
// get Post model from ../models/Post.js
const Post = require('../models/Post');
// our controller for creating new posts
// or the function that gets called when the form
// for creating new posts is submitted
exports.createPost = (req, res)=>{
// pass for now
}
이제
app.js
로 돌아가 정의한 경로에 대한 컨트롤러를 지정해 보겠습니다.// app.js
// the root route will show our two forms in /views/index.js/
app.get('/', (req, res)=>{
res.sendFile(__dirname + '/views/index.html');
});
// we need userControllers to access createUser()
const userControllers = require('./controllers/userControllers');
// we need postControllers to access createPost()
const postControllers = require('./controllers/postControllers');
// add a new route to call createUser()
app.post("/api/users/create/", userControllers.createUser);
// add a new route to call createPost()
app.post("/api/posts/create/", postControllers.createPost);
지금까지 우리는:
1-
views/index.html
에서 사용자 및 게시물을 생성하기 위한 두 가지 양식을 생성했으며, 두 가지 다른 경로로 이동하는 작업을 사용합니다.2- 해당 경로를 앱에 추가했습니다.
3- 양식이 제출되고
app.post
메서드에 전달될 때 호출되는 함수/컨트롤러를 정의했습니다.아직 실행하지 않은 경우
nodemon app
를 실행하고 http://localhost:3000/으로 이동하면 두 가지 간단한 양식이 표시됩니다.새 사용자 만들기
이제 재미있는 부분으로 이동하여 데이터베이스와 상호 작용을 시작하고 새 사용자를 생성해 보겠습니다.
//models/User.js
// the schema we defined in a previous step
const UserSchema = new Schema({
// if username is not provided "Anonymous" will get saved
// to the database instead
username: {
type: String,
default:"Anonymous",
},
// email has to be unqiue and always present when creating new users
email: {
type: String,
required: true,
unique: true
}
});
// contollers/userControllers.js
// get User model from ../models/User.js
const User = require('../models/User');
exports.createUser = (req, res)=>{
// 1
const {username, email} = req.body;
// 2
// when the username is provided create a userObj with
// username and email properties
// else create a userObj with just the email
const userObj = username? { username: username, email: email}
: { email: email }
// pass userObj to User
const newUser = new User(userObj);
// 3
newUser.save()
.then(user=>{
res.json({msg:"newUser saved successfully", user:user})
})
.catch(err=>{
console.log(err)
res.json({msg:"Error has occured"})
})
}
위의 UseSchema에서 우리는 새 사용자를 생성하기 위한 두 가지 속성인 사용자 이름과 이메일만 있다는 것을 알고 있습니다.
그리고
creatuser()
컨트롤러에서:먼저
req.body
에서 사용자 이름과 이메일 속성을 가져옵니다.const {username, email} = req.body;
양식 입력에 지정한 이름이기 때문에 사용자 이름과 이메일이라는 이름을 알고 있습니다.
...
<input id="username" type="text" name="username" placeholder="Name"/>
<label for="email">Email</label>
<input id="email" type="text" name="email" placeholder="Email"/>
...
둘째, User를 사용하여 양식과 함께 제출한 데이터로 User의 newUser 인스턴스를 생성합니다. 해당 데이터는 사용자 이름과 이메일 또는 이메일만 될 수 있습니다.
const userObj = username? { username: username, email: email}
: { email: email }
// pass the userObj to User
const newUser = new User(userObj);
마지막으로 newUser 인스턴스를 데이터베이스에 저장하려고 합니다.
newUser.save()
.then(user=>{
res.json({msg:"newUser saved successfully", user:user})
})
.catch(err=>{
console.log(err)
res.json({msg:"Error has occured"})
});
여기서
newUser.save()
를 사용하면 두 가지 일이 발생할 수 있습니다.newUser
가 성공적으로 저장되고 msg:"newUser saved successfully"
와 사용자 개체가 포함된 개체를 받습니다.또는
일부 오류가 발생하고
msg:"Error has occurred"
가 포함된 개체를 수신합니다.이제 사용자 생성 양식을 사용하여 사용자 이름에 대한 firstUser, 이메일에 대한 [email protected] 및 이메일만 제공하여 익명의 사용자를 생성해 보겠습니다.
이제 데이터베이스의 사용자 컬렉션에 두 명의 사용자가 있어야 합니다.
이제 몇 가지 게시물을 작성해 보겠습니다.
참조
freeCodeCamp
the mongoosejs docs .
MDN
code.tutsplus
Reference
이 문제에 관하여(5단계: 모델 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hajarnasr/step-5-use-the-models-3k5p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)