Node.js和expressjs paypal ipn侦听器给出错误500
我使用node.js和express创建了一个paypal ipn侦听器。 以下是我的侦听器代码:Node.js和expressjs paypal ipn侦听器给出错误500,node.js,paypal,express,paypal-ipn,Node.js,Paypal,Express,Paypal Ipn,我使用node.js和express创建了一个paypal ipn侦听器。 以下是我的侦听器代码: exports.ipn = function(req, res, next) { console.log('Paypal'); var ipn = require('paypal-ipn'); if(typeof req.body != "undefined") { ipn.verify(req.body, function callback(err, ms
exports.ipn = function(req, res, next) {
console.log('Paypal');
var ipn = require('paypal-ipn');
if(typeof req.body != "undefined") {
ipn.verify(req.body, function callback(err, msg) {
if (err) {
winston.error('IPN: ' + err);
} else {
if (req.body.payment_status == 'Completed' && msg == "VERIFIED") {
winston.info('IPN: ' + msg + " " + req.body.txn_id + " " + req.body.payer_email);
}
}
res.send(200);
res.end();
});
}
res.send(200);
res.end();
};
以下是我的expressjs设置和路线:
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.options('/', routes.options);
app.post('/', routes.up);
app.post('/ipn', routes.ipn);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
我使用此模块验证ipn消息,它与paypal ipn模拟器配合良好,但当我尝试实时使用它时,我会将其发送到我的节点控制台:
undefined
POST /ipn 500 351ms
没有其他错误消息,只有此错误500且未定义。有人能帮我找出这个未定义的变量是什么以及为什么会发生这个错误吗。即使我在听者中注释掉了所有内容,也会发生这种情况
编辑:
我将paypal ipn url更改为一些我尚未定义的随机url。我仍然得到未定义和错误500。如果我用curl发帖,我会得到404错误
编辑:
我发现如果我像这样使用curl进行post:
curl -d "test" -A "-" http://127.0.0.1/randomurl
app.use(require('connect').bodyParser());
然后我将得到错误500。
这给了我404:
curl -d "test=er" -A "-" http://127.0.0.1/randomurl
我找到了解决办法。expressjs bodyParser中有问题。我将expressjs设置更改为使用connect模块的bodyParser,如下所示:
curl -d "test" -A "-" http://127.0.0.1/randomurl
app.use(require('connect').bodyParser());