nodejs 실전 express 노트 의 추가 편집 및 삭제 기능

14158 단어 nodejs
사고: 한 사용자 가 온라인 에 있 을 때 자신 이 발표 한 글 페이지 에서 만 편집 하거나 삭제 할 수 있 습 니 다. 편집 할 때 글 내용 만 편집 할 수 있 고 글 제목 을 편집 할 수 없습니다.
1. 글 페이지 에 링크 편집 및 삭제 추가
<span><a class="edit" href="/edit///">  a>span>
<span><a class="edit" href="/edit///">  a>span>

2. Post 모델 에 편집 함수 추가
Post.edit= function(name,day,title,callback){
    //     
    mongodb.open(function(err,db){
        if(err){
            return callback(err);
        }
        //  posts  
        db.collection('posts',function(err,collection){
            if(err){
                mongodb.close();
                return callback(err);
            }
            //     ,            
            collection.findOne({
                "name":name,
                "time.day":day,
                "title":title,
            },function(err,doc){
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null,doc);//         (markdown  )
            });
        });
    });
};

3. index. js 입구 파일 에 edit 경로 규칙 추가
//     
    app.get('/edit/:name/:day/:title',checkLogin);
    app.get('/edit/:name/:day/:title',function(req,res){
        var currentUser = req.session.user;
        Post.edit(currentUser.name,req.params.day,req.params.title,function(err,post){
            if(err){
                req.flash('error',err);
                return res.redirect('back');
            }
            res.render('edit',{
                title:'  ',
                post:post,
                user:req.flash('success').toString(),
                success:req.flash('error').toString()
            });
        });
    });

4. edit. ejs 템 플 릿 엔진 구축

    <form method="post">
        <br/>
      <input type="text" name="title" value="" disabled="disabled"/>
        <br/>
      <textarea name="post" cols="100" rows="20">
        
      textarea>
    form>

5. Post 모델 에 update 방법 추가
//            
Post.update=function(name,day,title,post,callback){
    //     
    mongodb.open(function(err,db){
        if(err){
            return callback(err);
        }
        //  posts  
        db.collection('posts',function(err,collection){
            if(err){
                mongodb.close();
                return callback(err);
            }
            collection.update({
                "name":name,
                "time.day":day,
                "title":title,
            },{
                $set:{post:post}
            },function(err){
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null);
            });
        });
    });
};

6. 수정 성공 루트 추가
    //            
    app.post('/edit/:name/:day/:title',checkLogin);
    app.post('/edit/:name/:day/:title',function(req,res){
        var currentUser= req.session.user;
        Post.update(currentUser.name,req.params.day,req.params.title,req.body.post,function(err){
            var url=encodeURL('/u/'+req.params.name+'/'+req.params.day+'/'+req.params.title);//       ,     github    ,    
            if(err){
                req.flash('error',err);
                return res.redirect(url);//       
            }
            req.flash('success','    !');
            res.redirect(url);//  !     
        });
    });

7, Post 모델 에 remove 함수 추가
//      
Post.remove=function(name,day,title,callback){
    //     
    mongodb.open(function(err,db){
        if(err){
            return callback(err);
        }
        //  posts  
        db.collection('posts',function(err,collection){
            if(err){
                mongodb.close();
                return callback();
            }
            //     、              
            collection.remove({
                "name":name,
                "time.day":day,
                "title":title
            },{
                w:1
            },function(err){
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null);
            });
        });
    });
};

8. 삭제 루트 추가
//      
    app.get('/remove/:name/:day/:title',checkLogin);
    app.get('/remove/:name/:day/:title',function(req,res){
        var currentUser= req.session.user;
        Post.remove(currentUser.name,req.params.day,req.params.title,function(err){
            if(err){
                req.flash('error',err);
                return res.redirect('back');
            }
            req.flash('success','    ');
            res.redirect('/');
        });
    });

9. 권한 을 수정 하여 하나의 계 정 을 실현 하면 자신의 글 만 편집 할 수 있 습 니 다.
<span><a class="edit" href="/edit///">  a>span>
      <span><a class="edit" href="/edit///">  a>span>
//  
if (user && (user.name == post.name)) {%>
      <span><a class="edit" href="/edit///">  a>span>
      <span><a class="edit" href="/edit///">  a>span>
    

작은 매듭
편집 원 리 는 현재 매개 변 수 를 가 져 오 는 것 입 니 다. 대응 하 는 데이터 베 이 스 를 가 져 오 는 것 입 니 다. 데이터 베 이 스 를 사용 하 는 업데이트 함수 로 정 보 를 수정 하 는 것 입 니 다.삭제 원리: 매개 변수 에 따라 데이터베이스 정 보 를 직접 삭제 하고 홈 페이지 로 돌아 갑 니 다.

좋은 웹페이지 즐겨찾기