Node, Express 및 MongoDB에서 인증된 블로그 사이트 API

우리는 블로그 사이트 Api를 구축할 것이다. 이 Api는express, node, Mongodb를 사용하여 사용자 신분 검증을 한다. 이 Api는 간단한 기능 a를 가지고 있다. 왜냐하면 우리는 node의 프레임워크인express를 사용하기 때문이다.js, 모든 데이터는 MongodB 데이터베이스에서 왔고, Api 노드는 Node에서 왔습니다.js

설치 프로그램


노드부터 시작합시다.js 코드.폴더를 만들고 이름을 Blog site api로 지정합니다.
그런 다음 패키지를 만듭니다.터미널에서 npm init-y 명령을 입력하여 json 파일을 만듭니다.
그 후에 시작하기 전에 소프트웨어 패키지를 설치해야 합니다.
이 패키지는 저희가 전체 프로젝트에서 사용할 거예요.
터미널 열기 및 설치
api 폴더의 Express,Mongoose,dotenv,bcryptjs.
npm i express mongoose dotenv bcryptjs
패키지를 설치할 때 파일을 만들고 이름을 지정합니다.env 이 다음에 mongodb를 열고 링크를 프로젝트에 복사합니다.

mongodb의 URL은dotenv 패키지를 사용하여 메인 폴더에 연결합니다.이 가방은 우리가 원본 코드에서 비밀을 분리하는 것을 돕는다.github에 항목을 올릴 때 유용합니다.다른 사람과 데이터베이스 로그인 증명서를 공유하고 싶지 않을 수도 있습니다.원본 코드를 공유하는 겁니다.보시다시피 나는 이미 프로젝트에 나의 비밀번호를 숨겼다.
나는 또한 설치했다 bcryptjs. 위와 같다.이 패키지는 계산 능력에 따라 확장할 수 있는 암호 보안 플랫폼을 구축할 수 있으며, 항상 salt로 모든 암호를 해시 처리합니다.
이제 주 파일을 만들고 이름을 index.js로 지정합니다.이것은 우리가 모든 루트와 중간부품을 받아들일 곳이다.계속하기 전에api 폴더에서nodemon을 언제든지 가져옵니다
색인에 있는 코드를 변경할 수 있습니다.js 파일, 노드 서버 재시작
순간
npm i nodemon

초기 경로 설정


모든 내용이 설정되어 있는지 확인하는 초기 루트를 만듭니다
정확히노드의 택배 가방입니다.js에서 루트를 만들 수 있습니다. 이것은
인터넷의 역할.대부분의 백엔드 언어는 Node를 좋아합니다.js, Java
데이터베이스와 상호작용하는 경로를 만듭니다.최초의 노선은 상호작용이 없었다
그리고 데이터베이스에 액세스할 때 GET 요청을 사용하여 텍스트를 반환합니다.
색인을 만듭니다.api 폴더의 js 파일입니다.여기 있습니다. 택배 가져오세요.
우선 족제비 가방입니다.그런 다음 Express를 사용하여 실행할 포트 변수를 만듭니다.
네가 얻을 포트나 그들이 포트가 없다면 5000포트를 주어라.
const express = require('express');
const mongoose = require('mongoose');
//App Config
const app = express()
const port = process.env.PORT || 5000
//Middleware
//DB Config
//API Endpoints

//Listener
app.listen(port, () => console.log(`Listening on localhost: ${port}`))

데이터베이스 사용자 및 네트워크 액세스


MongoDB에서는 데이터베이스 사용자를 만들고 네트워크 접근을 제공해야 합니다.링크를 에 저장했기 때문에dotenv를 사용하여 초기 경로에 연결합니다.환경 파일

데이터베이스 모드 및 라우팅


우리가 사용하는 MongodB 데이터베이스는 JSON 형식으로 데이터를 저장하는 것이지
Oracle과 같은 기존 데이터베이스는MongodB에 필요한 패턴 파일을 만들 수 있습니다.얘가 알려줬어요.
MongoDB에 필드가 저장된 방식을 볼 수 있습니다.
먼저 폴더를 만들고 모델스라고 이름을 붙입니다.폴더create and file and nameUser.js에서 인증 모드를 작성합니다.

검증 모드
사용자가 사이트에 등록할 때 사용자를 위한 인증 모드를 만드는 것부터 시작합니다.사용자 세부 정보는 데이터베이스에 저장됩니다.따라서 사용자가 잠시 후에 도착하면 자동으로 로그인합니다. 왜냐하면 서버는 저장된 상세한 정보를 통해 그들을 식별하기 때문입니다.
const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
     username:{
         type:String,
         required:true,
         unique:true,
         min:3,
         max:20
     },
     email:{
        type:String,
         required:true,
         unique:true

     },
     password:{
        type:String,
        required:true,
        min:3,
        max:10
     },

},

{timestamps: true}

);

module.exports = mongoose.model("User", UserSchema);
위의 마지막 줄의 코드와 같이, 우리는 루트에서 그것을 가져올 수 있도록 코드를 내보냈다.
보시다시피 모델은 사용자 이름, 이메일, 비밀번호 등 상세한 정보를 포함하고 데이터베이스에 저장됩니다.따라서 사용자가 로그인을 시도할 때 서버는 데이터베이스에 이 사용자가 존재하는지 확인하고 데이터베이스에 사용자의 상세한 정보가 있으면 이 사용자가 로그인할 수 있도록 한다.
게시물 모드를 만들면 우리가 원하는 게시물을 저장할 수 있다는 것을 알 수 있습니다
모델 폴더에 파일을 만들고 Post.js 라고 명명합니다. 이것이 바로 Post 모드를 작성하는 곳입니다.
const mongoose = require('mongoose');

const PostSchema = new mongoose.Schema({
 desc : {
     type:String,
     required:true,

 },
 title : {
     type:String,
     required:true,

 }


},
{timestamps: true}
);

module.exports = mongoose.model('Post', PostSchema);
Google 게시물 모드에는 데이터베이스에 저장될 제목과 설명이 포함되어 있습니다
현재, 당신은 이 모드를 사용하여 데이터베이스에 데이터를 추가하는 단점을 만들 수 있습니다.이것
여기서 MVC 모드를 따릅니다.이것은 웹 응용 프로그램의 전통적인 절차다.
다음에 POST 요청을 사용하여 사용자로부터 데이터를 가져와
데이터베이스.모든 끝점을 사용할 수 있습니다.예를 들어 Dev.to에 관한 글을 썼다면
POST 단추를 누르면 게시 후 Dev.to 데이터베이스에 글이 저장됩니다
청을 내다.
GET 끝점은 데이터베이스에서 모든 데이터를 가져옵니다.다시 한 번 말하지만, 너는 무엇이든지 줄 수 있다
종점예를 들어, Dev.to의 게시물을 찾아보면 GET 요청이 수신됩니다.
끝으로 보내면 끝점은 Dev.to 데이터베이스에서 모든 게시물을 가져옵니다.

노선.
폴더를 만들고routes라고 이름을 붙입니다.우선 인증 루트부터 시작하겠습니다.routes 폴더에 파일을 만들고 Auth.js 라고 명명합니다. 다음은 인증 코드입니다.
const router = require('express').Router();

const User = require('../models/User');

const bcrypt = require('bcryptjs')


//register end point
router.post('/register', async (req,res)=> {


   // const confirm = await User.find({Username : req.body.username ,email : req.body.email})
    //confirm && res.status(400).json('this user or email exist');
    try {
    const salt = await bcrypt.genSalt(10);
    const hashedPass = await bcrypt.hash(req.body.password, salt);

const savedPost = await new User({
        username: req.body.username,
        email: req.body.email,
        password : hashedPass       

})

     const resultPost = await savedPost.save()

     res.status(200).json(resultPost);
  } catch (error) {
     res.status(500).json(error); 
  }

})


//login endpoint
router.post('/login', async (req,res)=>{

    try {
        const user = await User.findOne({username : req.body.username});
        !user && res.status(400).json('wrong user');

        const validate = await bcrypt.compare(req.body.password,user.password);
        !validate && res.status(400).json('wrong password');

        const {password, ...others} = user._doc;

        res.status(200).json(others);


    } catch (error) {
       res.status(500).json(error); 
    }




})







module.exports = router;
위의 코드에서 보듯이 모드를 가져왔습니다. 디테일을 삽입하고 저장할 것입니다.
/register 끝점에 대한 POST 요청을 작성합니다.부하가 많다
요청 중입니다.신체사용자 이름, 비밀번호, MongodB로 보내는 이메일.그리고 New 방법을 사용하여 사용자의 상세한 정보를 보냅니다.하면, 만약, 만약...
수신 상태 200;그렇지 않으면 상태 500을 받게 됩니다.
다음은 데이터베이스에서 데이터를 얻기 위해post endpoint to/login을 만듭니다.
여기에서 findOne () 을 사용하고 성공할 때 상태 200 (그렇지 않으면 상태 500) 을 받습니다.
코드에서, 우리는 위에서 말한 바와 같이 bcryptjs를 사용하여 우리의 암호를 보호했다.
Post routes로 이동하여 routes 폴더에 파일을 만들고 이름을 Post.js 로 지정합니다. Post 파일의 코드는 다음과 같습니다.
const router = require('express').Router();
const Post = require('../models/Post');

//create post 
router.post('/', async (req,res)=> {
try {
    const savePost = await new Post(req.body);
    const savedPost = await savePost.save()
    res.status(200).json(savedPost);

} catch (error) {
    res.status(500).json(error);
}

})
//update post
router.put('/:id', async (req,res)=> {
 try {
    const post = await Post.findById(req.params.id);
    if(post.userId === req.body.userId) {
      await Post.updateOne({$set:req.body});
      res.status(200).json('it has been updated');

    } else {
        res.status(403).json('you can only update your post');
    }
 } catch (error) {
     res.status(500).json(error)
 }

})


//delete post 
router.delete('/:id', async (req, res)=> {
  try {
   const post =  await Post.findById(req.params.id);
   if (post.userId === req.body.userId) {
      await Post.deleteOne()
      res.status(200).json('the post is deleted')
   } else {
       res.status(403).json("you can only delete your post")
   }
  } catch (error) {
    res.status(500).json(error)  
  }

})

//get All posts 
router.get('/', async (req,res) => {
  try {
   const posts = await Post.find();
  res.status(200).json(posts);

  } catch (error) {
   res.status(500).json(error); 
  }


})

//get one post 
router.get('/:id',async(req,res)=> {

  try {
    const post = await Post.findById(req.params.id);
    res.status(200).json(post);
  } catch (error) {
    res.status(500).json(error);
  }


})



module.exports = router;
위 코드에서, 우리는 이미 우리의 댓글을 만들고, 저장하고, 편집할 수 있고, 삭제할 수 있으며, 모든 댓글이나 한 편의 댓글을 얻을 수 있다
우선 post 방법으로 게시물을 만들고 지시에 따라 저장합니다.우리는 put 방법으로 댓글을 편집하고, 몬고우스 패키지에서 제공하는 id 방법으로 댓글을 편집합니다. 댓글을 찾으면 findById 방법으로 댓글을 업데이트합니다.
세 번째 방법에서 우리는 사용한다updateOne.여기에서, 우리는findById 방법을 사용하여 삭제할 댓글을 찾고, deleteOne () 을 사용하여 댓글을 삭제합니다
..
마찬가지로 delete 방법도 비슷한 방식으로 완성되었습니다. 첫 번째 get으로 하나의post만 찾고, 두 번째 get으로 모든post를 가져옵니다.
코드의 마지막 줄에서, 우리는 공유기를 사용하여 코드를 내보냈다.이것은 핸들 요청을 쉽게 추적해서 주 파일 인덱스로 보내는 데 도움이 됩니다.아래 캡처에서 보여드릴게요.

위 화면 캡처에서 보듯이, 우리는 현재 get 기능을 중간부품으로 접근할 수 있습니다. 코드를 가져옵니다. 공유기 기능은 쉽게 가져올 수 있도록 도와줍니다.
예제use().우리는 이미 우리의 노선을 도입했다
그림에서 보듯이, 우리는 단점 import authroute = require('./routes/Auth'); 과 마지막 공유기를 만들었다.
내가 잊어버리기 전에 우리는 급행열차를 탔다.json () 중간부품은 우리의 데이터가 json 형식이기 때문에express에 전송된 요청 대상을 json 대상으로 식별하는 방법을 내장했습니다.
이 글을 읽어 주셔서 감사합니다. 많은 것을 배웠으면 합니다. 다음 글에서는 Postman 소프트웨어에서 테스트하는 방법을 배울 것입니다.

좋은 웹페이지 즐겨찾기