我一直在绞尽脑汁试图找出为什么这个POST请求一直返回500状态消息 . 我还将包含我的app.js和请求来自的Swift代码 . 如果有任何其他信息,请告诉我 .
Frontend Language: Swift
Backend Language: Node.js
Purpose: Verifying Stripe Custom Account with ssn_last_4
Frontend request; User fills out ssn_last_4 from textfield in ViewController
@IBAction func saveLast4(_ sender: Any) {
let ssn = ssnLast4.text
let last4Info = ["ssn_last_4": ssn as Any] as [String:Any]
self.passLast4(last4Info: last4Info)
}
func passLast4(last4Info: Dictionary)
{
let ssnURL = URL(string: "http://myWebsite:3000/payment/add-SSN")!
var request = URLRequest(url: ssnURL)
let userJSON = try! JSONSerialization.data(withJSONObject: last4Info, options: .prettyPrinted)
let userJSONInfo = NSString(data: userJSON, encoding: String.Encoding.utf8.rawValue)! as String
request.httpBody = "last4Info=\(userJSONInfo)".data(using: String.Encoding.utf8)
request.httpMethod = "POST" // POST method.
URLSession.shared.dataTask(with: request) { (data, response, error) -> Void in
if (error != nil){ // error handling responses.
print ("An error has occured.")
}
else{
print ("Success!")
}
}.resume()
}
Backend POST Request in users.js:
router.post("/add-SSN", function (req,res) {
console.log('add-SSN', req.body);
var userInfo = req.body.userInfo;
var userJSON = JSON.parse(userInfo);
var userID = userJSON['userID'];
var last4Info = req.body.last4Info;
var last4JSONInfo = JSON.parse(last4Info);
var ssn_last_4 = last4JSONInfo['ssn'];
db.one(`select \"Users\".\"stripeAccountID\" from database.\"Users\" where \"Users\".\"userID\" ='${userID}'`)
.then(function(data) {
console.log('user stripeID', data.stripeAccountID);
stripe.accounts.update({
legal_entity: {
ssn_last_4: ssn_last_4
}
})
res.status(200).json({
status: 'Success',
data: data,
message: 'Stored ssn last 4.'
})
.catch(function(err){
console.log(err);
})
})
})
我在users.js文件中注意到的一件事是 console.log('add-SSN, req.body); 返回: add-SSN { last4Info: '{\n "ssn_last_4" : "1111"\n}' } . 所以看起来数据有点落到了后端,但我的POST中的某些内容必须关闭?
app.js:
var express = require('express');
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');
var admin = require('firebase-admin');
var index = require('./routes/index');
var router = express.Router();
var serviceAccount = require('serviceAccount');
var app = express();
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'dbURL'
});
var users = require('./routes/users');
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
我想我已经探索了我能找到/想到的每一个选择 . 我尝试从 users.js 文件中删除 bodyParser ,或尝试将其直接添加到每个POST请求中 .
每次,我的控制台返回500状态 .
如果你看到我可能做错了什么,请告诉我!
提前感谢您的帮助