快递发布后无法获得

时间:2016-10-28 15:04:58

标签: javascript node.js express vue.js

我正在使用Vue.js和Express和MongoDB编写Web应用程序。 Express服务器有两条Vue客户端将使用的路由:POST:/ post; GET:/ post;第一个是发布帖子,另一个是发帖子;

当我发布帖子时(客户端发帖/发帖);帖子发布成功,然后客户端转到第一页获取帖子(客户端请求GET / post),但服务器错误:'发送后无法设置标题。',我必须重启服务器,然后一切顺利,刚刚发布的帖子正常显示。

我已经尝试了很多,但我无法解决,我需要你的帮助。

快递的/ post路由器:

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;

1 个答案:

答案 0 :(得分: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;

或者在error子句中返回,否则它将尝试设置status标题两次,这是生成输出后的最后一次。