추가 단계: 게시물 작성
18081 단어 mongooseexpressjavascriptbeginners
1- 우리는 두 개의 다른 경로에 대한 작업과 함께 사용자와 게시물을 만들기 위한 두 가지 간단한 양식을 만들었습니다.
2- 이 경로를 앱에 추가했습니다.
3- 각 양식 제출의 각 경로에 대해 하나씩 두 가지 기능/컨트롤러를 정의했습니다.
4-
createUser()
함수를 사용하여 req.body
에서 사용자 이름과 이메일을 추출하고 해당 정보를 사용하여 새 사용자를 생성했습니다.5- 두 명의 사용자를 만들어 데이터베이스에 저장했습니다. 하나는 사용자 이름이 "firstUser"이고 다른 하나는 "Anonymous"입니다.
이제 게시물을 만들어 데이터베이스에 저장할 차례입니다. 하지만 먼저 이전 단계에서 만든 PostSchema를 살펴보겠습니다.
// models/Post.js
const PostSchema = new Schema({
title: String,
content: {
type: String,
required: true,
trim: true,
minlength: 5,
},
created_at: {
type: Date,
default: Date.now
},
author: {
type: Schema.Types.ObjectId,
ref: "User"
}
});
여기서 가장 중요한 속성은 작성자와 콘텐츠입니다. 작성자와 콘텐츠를 제공하지 않으면 게시물을 작성할 수 없습니다.
우리는 작성자 속성이
Schema.Types.ObjectId
유형이라는 것을 알고 있습니다. 이는 게시물 작성자의 _id를 보유하고 있음을 의미합니다. 그리고 데이터베이스에 두 명의 사용자만 있으므로 선택할 수 있는 _id는 두 개뿐입니다.User
모델을 사용하고 firstUser
의 _id를 가져온 다음 해당 _id를 사용하여 첫 번째 게시물을 작성해 보겠습니다.// contollers/postControllers.js
// get User model from ../models/User.js
const User = require('../models/User');
// get Post model from ../models/Post.js
const Post = require('../models/Post');
exports.createPost = async (req, res)=>{
// grab the title and content
const {title, content} = req.body;
// fetch the first user with "firstUser" username
const firstUser = await User.findOne({username:"firstUser"});
// create a new instance of Post with
const newPost = new Post({
title: title,
content: content,
author: firstUser._id
});
// save the post
newPost.save()
.then(post=>{
res.json({msg:"newPost saved successfully", post:post})
})
.catch(err=>{
console.log(err)
res.json({msg:"An error has occured"})
})
}
여기서
createPost()
함수에 대해 가장 먼저 주목해야 할 점은 async을 사용할 수 있도록 await을 만들어 데이터베이스에서 가져온 값을 나중에 사용할 수 있는 변수에 저장할 수 있다는 것입니다. 암호.이 줄과 같이:
const firstUser = await User.findOne({username:"firstUser"});
여기서는
findOne()
메서드를 사용하여 사용자 이름이 "firstUser"인 데이터베이스의 첫 번째 사용자를 가져와 firstUser
변수에 저장했습니다.Mongoose
<Model>.fineOne()
(또는 데이터베이스와 상호 작용하는 데 사용되는 다른 메서드)는 약속을 반환하므로 해결해야 합니다. 즉, then()
및 catch()
메서드와 함께 사용해야 합니다.await
가 없으면 다음과 같이 createPost()
작성했을 것입니다....
// Not async anymore
exports.createPost = (req, res)=>{
const {title, content} = req.body;
User.findOne({username:"firstUser"})
.then(user=>{
// 1
const newPost = new Post({
title: title,
content: content,
author: user._id
});
newPost.save()
.then(post=>{
res.json({msg:"newPost saved successfully", post:post})
})
.catch(err=>{
console.log(err)
res.json({msg:"An error has occured"})
})
})
.catch(err=>{
console.log(err)
});
}
1- 두 번째 접근 방식은 데이터베이스에서 가져온 사용자가
then()
블록 내에서만 접근할 수 있다는 점입니다. 따라서 우리 코드에서 newPost
변수를 생성하고 내부에 저장User.fineOne.then(user=>{})
을 중첩해야 했습니다. 가져온 사용자는 외부가 아니라 그곳에서 접근할 수 있기 때문입니다.참고:
async/await
를 사용하는 것이 여기에서 두 가지 방법 중 가장 좋은 방법인지 확실하지 않지만 때로는 코드를 더 깊은 수준으로 중첩하는 대신 사용하고 싶습니다.이제 "firstUser"에 대한 새 게시물을 만들 수 있습니다. 야이
http://localhost:3000/으로 이동하여 몇 개를 만듭니다.
Mongoose는 데이터베이스와 상호 작용하고 문서를 쉽게 생성, 가져오기, 업데이트 또는 삭제할 수 있도록 도와줍니다many methods and options.
내가 작업한 몇 가지 방법은 다음과 같습니다.
1- findOne(«selectors») : 전달된 선택자와 일치하는 첫 번째 문서를 가져오거나 일치하지 않는 경우
null
문서를 가져옵니다.// returns the first user matched
User.findOne({username:"Anonymous", email:"[email protected]"});
2- findById(«id») : 전달된 id로 객체를 찾습니다.
// return the user with the id userId
const { userId } = req.params
User.findById(userId)
3- find(«selectors») : 선택자와 일치하는 모든 문서의 배열을 반환하거나 일치하지 않는 경우 빈 배열을 반환합니다.
// returns an array of all the users with username "Anonymous"
User.find({username:"Anonymous"});
// returns all the users
User.find()
3- findOneAndDelete(«selectors») : 일치하는 문서를 찾아 제거하고 찾은 문서(있는 경우)를 콜백에 전달합니다.
// finds the user with the _id userId and deletes it
const { userId } = req.params
User.findOneAndDelete({_id:userId})
몇 가지 옵션:
1- limit(«Number») : 반환된 배열을 전달된 숫자로 제한합니다.
// returns an array of ten users with usename "Anonymous"
User.find({username:"Anonymous"})
.limit(10)
2- sort(«Object|String») : 정렬 순서를 설정합니다. 그리고 개체가 전달되면 허용되는 값은
asc
, desc
, ascending
, descending
, 1
및 -1
입니다.// returns an array of ten users
// sorted by id
User.find()
.limit(10)
.sort({_id:"asc", username:"desc"})
// Or .sort('_id -username')
지금까지 Express와 Moongose를 함께 사용하는 방법에 대해 배운 것은 이것이 거의 전부라고 생각합니다. 그리고 저는 아직 배울 것이 더 많다고 생각합니다.
읽어 주셔서 감사합니다
참조
freeCodeCamp
the mongoosejs docs .
MDN
code.tutsplus
Reference
이 문제에 관하여(추가 단계: 게시물 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hajarnasr/extra-step-writing-posts-3i2c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)