2016-10-28 2 views
1

나는 Vue.js와 익스프레스와 MongoDB와 웹 응용 프로그램을 쓰고 있어요. Express 서버에는 Vue 클라이언트가 사용할 두 경로가 있습니다. POST :/post; 얻으십시오 :/포스트; 첫 번째는 게시물을 게시하고 다른 게시물은 게시물을 얻는 것입니다.익스프레스 게시 후 얻을 수 없습니다

게시 할 때 (클라이언트가 POST/POST를 요청); 게시물이 성공적으로 게시 된 다음 클라이언트가 첫 페이지로 이동하여 (클라이언트가 GET/POST를 요청) 서버 오류 : '보낸 후 헤더를 설정할 수 없습니다.', 서버를 다시 시작해야합니다. , 그리고 모든 것이 잘 작동하면 지금 게시 된 게시물이 정상적으로 표시됩니다.

나는 많이 시도했지만 해결할 수 없다. 도움이 필요하다.

표현의/포스트 라우터 : 그렇지 않으면, 두 번 마지막을 status 헤더를 설정하려고합니다,

var express = require('express'); 
var router = express.Router(); 
var Post = require('../models/post'); 
var moment = require('moment'); 
var jwt = require("jwt-simple"); 

router.get('/',function(req,res,next){ 
    Post.get(function(err,posts){ 
     if(err){ 
      res.status(404); 
      res.end(); 
     } 
    res.status(200); 
    res.json({ 
     posts:posts 
    }); 
    }); 
}); 
    router.post('/',function(req,res,next){ 
     var token = req.body.access_token; 
     if(token){ 
     try{ 
     var decoded = jwt.decode(token,req.app.get('jwtTokenSecret')); 
     if(decoded.exp < Date.now()){ 
      console.log("haha") 
      res.end('token expired',401); 
     } 
     //console.log(decoded) 
     var newPost = new Post({ 
      name:decoded.iss, 
      title:req.body.title, 
      content:req.body.content 
     }); 
     console.log(newPost); 
     newPost.save(function(err,post){ 
      if(err){ 
       console.log("publish failed"); 
       res.status(500); 
       res.send({error:1}); 
      } 
      console.log('publish done'); 
     }); 
     res.status(200); 
     res.send({}); 
    } catch(err){ 
     res.status(401); 
     res.send('no token'); 
    } 
} 
}); 
module.exports = router; 
+0

'newPost.save()'함수에서 일어나는 일과 관계없이'res.send ({});를 사용하면 논리적 인 결함이있는 것처럼 보입니다. 그러나 실패 할 경우, 'status' 헤더를 다시 보냅니다. 헤더는 이미 보내 졌으므로 비동기'save()'함수 밖에서 출력하기 시작했습니다. – adeneo

+0

그냥 res.end()로 수정하지만, 동일한 오류 – laoqiren

+0

newPost.save()가 잘 실행됩니다. '/ post'를 가져올 때 오류가 발생합니다. – laoqiren

답변

2
이 경로를 변경

router.get('/',function(req,res,next){ 
    Post.get(function(err,posts){ 
     if(err){ 
      res.status(404); 
      res.end(); 
     } else { 
      res.status(200); 
      res.json({ 
       posts:posts 
      }); 
     } 
    }); 
}); 

router.post('/', function(req, res, next) { 
    var token = req.body.access_token; 
    if (token) { 
     var decoded = jwt.decode(token, req.app.get('jwtTokenSecret')); 
     if (decoded.exp < Date.now()) { 
      console.log("haha") 
      res.end('token expired', 401); 
     } else { 
      var newPost = new Post({ 
       name: decoded.iss, 
       title: req.body.title, 
       content: req.body.content 
      }); 

      newPost.save(function(err, post) { 
       if (err) { 
        console.log("publish failed"); 
        res.status(500); 
        res.send({error: 1}); 
       } else { 
        res.status(200); 
        res.send({}); 
       } 
      }); 
     } 
    } else { 
     res.status(401); 
     res.send('no token'); 
    } 
}); 
module.exports = router; 

을 수행하는 또는 오류 절에 반환 출력이 생성 된 후 시간.

+0

이제 Post.get()에서 오류가 발생했습니다. 하지만 서버를 다시 시작하는 동안 작동하기 때문에 나는 이유를 모르겠다. github에서 내 코드를 살펴보실 수 있겠습니까? https : //github.com/laoqiren/vue-express-forum 감사합니다. – laoqiren

+0

위의 코드를 사용해 보셨습니까? – adeneo

+0

예, 그때, Post.get() 실행 오류가 발생했습니다. – laoqiren

관련 문제