快递寄出后收不到

express can't get after posting

本文关键字:快递      更新时间:2023-09-26

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

当我发布一个帖子(client beg post/post);文章发布成功,然后客户端转到第一页获取文章(客户端请求get/post),但是服务器错误:' Can't set header after they are sent. '’,我必须重新启动服务器,然后一切正常,刚刚发布的帖子显示正常。

我试了很多方法,但还是解决不了,我需要你的帮助。

the/post router of express:

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;

把你的路由改为do

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标头,最后一次是在生成输出后。