【问题标题】:Making multiple AngularJS Post requests to an Express Server? Server crashes on second post request向 Express 服务器发出多个 AngularJS Post 请求?服务器在第二次发布请求时崩溃
【发布时间】:2017-12-12 21:52:23
【问题描述】:

因此,鉴于我无法在我的客户端中同时运行这两个帖子请求,我正在尝试在第一篇文章的 .then 部分运行第二篇文章。这在我的其他项目中一直运行良好。但是由于某种原因,当第二个帖子请求触发时,我的服务器没有回复。当我检查服务器的控制台时,我注意到它崩溃了并且有一条错误消息(在这篇文章的底部)。

这可能是什么原因???

我在我的服务器代码中的第二个发布请求上设置了断点,并且注意到断点甚至没有被命中。服务器在点击之前崩溃并让我选择继续。

客户端代码(当用户按下按钮时触发):

$scope.searchCharacter = function(){
    var request = {name: $scope.charName, realm: $scope.selectedRealm};
    //First post request
    $http.post('/searchCharacter', request)
    .then(function(response) {
        //sets some variables
        var id = 0;
        //Second post request
        $http.post('/helloworld', id)
        .then(function(response) {
            //sets some more variables      
            debugger;             
        });          
    });
}

服务器代码:

//First post request
app.post('/searchCharacter', jsonParser, function (req, res) {
    blizzard.wow.character(['profile', 'stats', 'items', 'statistics'], { origin: 'us', realm: req.body.realm.name, name: req.body.name })
    .then(response => {
        if(response.status != 200){
            res.send("That character doesn't exist! Please enter a valid character name.");
        } else {
            console.log(response.data);
            res.send(response.data);
        }
    });
});
//Second Post Request
app.post('/helloworld', jsonParser, function (req, res) {
    console.log(req.body);
    res.send("hello");
});

错误信息:

SyntaxError: Unexpected token #

在 Object.parse(本机)

在 createStrictSyntaxError (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\body-parser\lib\types\json.js:157:10)

解析时 (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\body-parser\lib\types\json.js:83:15)

在 c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\body-parser\lib\read.js:121:18

在 invokeCallback (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\body-parser\node_modules\raw-body\index.js:224:16)

完成(c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\body-parser\node_modules\raw-body\index.js:213:7)

在 IncomingMessage.onEnd (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\body-parser\node_modules\raw-body\index.js:273:7)

在 emitNone (events.js:67:13)

在 IncomingMessage.emit (events.js:166:7)

在 endReadableNT (_stream_readable.js:921:12)

【问题讨论】:

  • 它可能会在 id 作为数字 id = 0 时窒息。仅出于调试目的,尝试设置id = {} 或从app.post('/helloworld') 中删除jsonParser,看看它是否仍然崩溃。
  • 我认为对于您的 helloworld 路由,您应该使用路由参数而不是 json 正文,即 app.post('helloworld/:id')
  • 如果你去 app.post('helloworld/:id') 使用 req.params.id
  • @t.888 哦!!!!现在它工作得很好。我把它变成了一个空物体,一切都被解雇了。尽管感谢有关使用参数的提示。我不知道你是这样传递参数的,而且我不得不使用 jsonparser 因为没有它我无法在我的服务器函数中读取 req.body 。我会尝试将其合并到我的代码中:)
  • 您可以同时运行请求。异步函数的本质是它们可以并发运行。

标签: javascript angularjs node.js express angular-http


【解决方案1】:

试试这个:

$scope.searchCharacter = function(){
    var request = {name: $scope.charName, realm: $scope.selectedRealm};
    //First post request
    $http.post('/searchCharacter', request)
    .then(function(response) {
        //sets some variables
        var id = 0;
        //Second post request (append id to route).
        $http.post('/helloworld/' + id)
        .then(function(response) {
            //sets some more variables      
            debugger;             
        });          
    });
}

//First post request
app.post('/searchCharacter', jsonParser, function (req, res) {
    blizzard.wow.character(['profile', 'stats', 'items', 'statistics'], { origin: 'us', realm: req.body.realm.name, name: req.body.name })
    .then(response => {
        if(response.status != 200){
            res.send("That character doesn't exist! Please enter a valid character name.");
        } else {
            console.log(response.data);
            res.send(response.data);
        }
    });
});
//Second Post Request (get id from req.params.id)
app.post('/helloworld/:id', function (req, res) {
    console.log(req.params.id);
    res.send("hello");
});

它将id 附加到helloworld 请求,并使用req.params.id 定义路由helloworld/:id 以从请求中提取id。

【讨论】:

    【解决方案2】:

    Facepalm 我正在使用 var id = 0 并将其传递给我的函数,却没有意识到它需要作为对象或参数传递。感谢评论的人!

    【讨论】:

    • 很高兴你把它整理好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多