首页 > 解决方案 > Node.js 如何将错误消息从快速路由器发送到 Web 控制台

问题描述

在我的应用程序中,我正在放置一个 http 请求,并且在快乐的情况下一切正常。但是当我故意提供错误数据来填充错误时,它会在 node.js 服务器控制台中显示错误,但不会将错误消息发送到 Web 控制台。

在我的 Angularjs 中,我在角度控制器功能中放置了如下 $http 请求。

$http({
    url: '/startprocess',
    method: "POST",
    data: {host: 'XX.XX.XX.XXX', user: 'XX', pass: 'YYYY'},
    crossDomain: true,
    //timeout: 1,
    headers: {'Content-Type': 'application/json','charset' : 'utf-8'}
    }).then(function(response) {                                    
                console.log('success in startprocess');
                $scope.mydata = response;   
    }, function(response) {
        console.log('error in startprocess');
        console.log(response);                          
    });

处理这个请求app.js

var startprocess = require('./routes/startprocess');        
app.use('/startprocess', startprocess);

在路由文件夹中,我有startprocess.js 以下代码,

var express = require('express');
var router = express.Router();
var SSH = require('simple-ssh');
router.post('/startprocess', function(req, res){
    ssh = new SSH({
            host: req.body.host,
            user: req.body.user,
            pass: req.body.pass
        });

    ssh.exec('ls', {
        out: function(stdout) {
            console.log(stdout); 
        }
    }).start();

    ssh.on('error', function(err) {
        console.log('In Start, something went wrong.');
        console.log(err);
        //res.setHeader('Content-Type', 'application/json');
        res.send({ data: err }) 
        ssh.end();
    });
});

请建议我更好的错误处理方式。如果收到错误,我想显示一些警报。我注意到如果出现错误,它会在服务器控制台上显示错误,但在 chrome 控制台中In Start, something went wrong.显示“ ”。success in startprocess

谢谢

标签: node.jsexpress-router

解决方案


您提供的两个回调是成功和错误回调。如果响应码不在 200 到 299 之间,则会发生错误回调。默认情况下,错误码是 200,因此您需要res.status(400)在调用前将响应码设置为或类似res.send

因此,{ data: err }您正在创建的对象可能在response您的第一个回调中的变量中。


推荐阅读