在 AWS 上部署的 NodeJs 上的 Post 函数返回错误:502

Posted

技术标签:

【中文标题】在 AWS 上部署的 NodeJs 上的 Post 函数返回错误:502【英文标题】:Post function on NodeJs Deployed on aws returns Error:502 【发布时间】:2016-06-29 21:01:08 【问题描述】:

我目前正在实现一个服务器,该服务器处理来自客户端的 PayPal API 调用并与 PayPal 的服务进行通信,以便获取令牌并在 Braintree 中创建用户。

弹性豆茎的部署进展顺利。当我通过路由器调用令牌方法时,我得到了令牌并成功了。当我尝试创建一个新的 Braintree 客户时,问题就出现了,我收到了一个神秘的 502 错误。知道为什么吗?我正在使用来自 AIM 的标准 nginx 设置,监听端口 80。这不是重复的,因为其他类似的问题没有解决我的问题。

使用 nginx 1.8.0

index.js

var express = require('express');
var router = express.Router();
var http = require('http');
var braintree = require('braintree');

var gateway = braintree.connect(
                            environment: braintree.Environment.Sandbox,
                            merchantId: "xxxxxxxxxxxxxxx",
                            publicKey: "xxxxxxxxxxxxxxx",
                            privateKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
                            );

router.get('/', function(req,res) 
       res.send('Iam a tree, a brain tree');
       );

router.get('/token', function (req, res) 
       gateway.clientToken.generate(null, function (error, response) 
                                    res.json(response);
                                    );
       );

router.post('/createCustomer', function(req, res) 

var customer = req.body;
console.log(req.body);
       gateway.customer.create(
                               firstName: customer.firstName,
                               lastName: customer.lastName,
                               company: customer.company,
                               email: customer.email,
                               phone: customer.phone,
                               fax: customer.fax,
                               website: customer.website
                               , function (err, result) 
                               res.json(err,result);
                               );
       );

module.exports = router;

ma​​in.js

var express = require('express');
var http = require('http');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

/// catch 404 and forward to error handler
app.use(function(req, res, next) 
var err = new Error('Not Found');
err.status = 404;
next(err);
);


// will print stacktrace
if (app.get('env') === 'development') 
app.use(function(err, req, res, next) 
    res.status(err.status || 500);
    res.render('error', 
        message: err.message,
        error: err
    );
);


// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) 
res.status(err.status || 500);
res.render('error', 
    message: err.message,
    error: 
);
);

module.exports = app;

最后是我的 www 文件

#!/usr/bin/env node
var debug = require('debug')('test');
var app = require('../main.js');

app.set('port', process.env.PORT || 8081);

var server = app.listen(app.get('port'), function() 
  debug('Express server listening on port ' + server.address().port);
);

【问题讨论】:

【参考方案1】:

因为我发现了问题的问题,所以回答了我的问题。问题的根源在于“/createCustomer”,从

中删除 err
res.json(err,result);

并将其更改为

res.json(result);

另外,我不是用选项(姓名,姓氏)创建一个客户,只是一个空的。将它包装起来,“/createCustomer”路由器函数现在看起来像这样。

/* Get Creates a new customer with the given params */
router.post('/createCustomer', function(req, res) 

  var customer = req.body;
  console.log(req.body);

  gateway.customer.create(, function(err, result) 
    res.json(result);
  );
);

这有点奇怪,因为该函数的第一个版本是从关于节点服务器设置的 Braintree 文档中复制的。无论如何,目前此解决方法允许在自定义 Parse 服务器上创建与我当前用户的客户链接,并稍后编辑其属性。

【讨论】:

以上是关于在 AWS 上部署的 NodeJs 上的 Post 函数返回错误:502的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cloudformation 上的 UserData 未部署在 EC2 实例上

Nodejs 502 Bad Gateway 在 Elastic Beanstalk AWS 上部署 Express

nodejs mongoose在部署到aws时显示错误,在本地机器上工作

如何将在 Lambda 上使用 NodeJS 丰富的对象返回到 API POST 请求

如何使用 ReactJS/NodeJS 一起部署到 Amazon Web Services (AWS)?

如何将 React + NodeJS Express 应用程序部署到 AWS?