1
我希望我可以得到一些幫助。以下是我寫過的用於發佈電子郵件和密碼的代碼。這一切都很好,直到它到達服務器。服務器將其處理爲:IONIC 3應用程序未正確發佈JSON
{ '{"email":"[email protected]","pin":"1234"}': '' }
我不確定問題出在哪裏。我試過通過POSTman發送郵件和郵件,並且沒有問題。我甚至包含了POSTman創建的頭文件(Content-Type:application/x-www-form-urlencoded),以確保我以同樣的方式發送所有信息。
這裏是我的代碼離子:
export class LoginPage {
baseURL: string = 'http://localhost:1000/api'
data: any;
constructor(public navCtrl: NavController, public navParams: NavParams, private http: Http) {
}
login(email, pin) {
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let options = new RequestOptions({ headers: headers });
let body = JSON.stringify({
email: email,
pin: pin
});
console.log(body); //This looks just like it's supposed to
this.http.post(this.baseURL + '/authenticate', body, options)
.map(res => res.json())
.subscribe(data => {
console.log(this.data);
}, error => {
console.log("Oooops!");
});
};
}
這裏是我的服務器代碼,以防萬一我搞亂的東西在那裏。
// ===========================
// get the packages we need ==
// ===========================
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var router = express.Router();
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
var config = require('./config'); // get our config file
var models = require('./app/models/models');
// =======================
// configuration =========
// =======================
var port = process.env.PORT || 1000;
mongoose.connect(config.database); // connect to database
app.set('secret', config.secret); // secret variable
// use body parser so we can get info from POST and/or URL parameters
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use(bodyParser.json()); // support json encoded bodies
// use morgan to log requests to the console
app.use(morgan('dev'));
// =======================
// routes ================
// =======================
// basic route
app.get('/', function (req, res) {
res.send('Hello! The API is at http://localhost:' + port + '/api');
});
var apiRoutes = express();
// apply the routes to our application with the prefix /api
app.use('/api', apiRoutes);
// API ROUTES -------------------
//===============================
// Log a user into their account.
//===============================
apiRoutes.post('/authenticate', function (req, res) {
console.log(req.body); //here I'm getting: { '{"email":"[email protected]","pin":"1234"}': '' }
res.json(req.body);
});
app.listen(port);
console.log('Stuff happens at http://localhost:' + port);
看看我給這裏的答案可以幫助:https://stackoverflow.com/questions/46661599/node-js-converting-array-字符串和添加斜槓到它/ 46672389#46672389總之,你的'內容類型'應該是'application/json',而不是'application/x-www-form-urlencoded'。 – skirtle
感謝您的快速回復!我試過,儘管在服務器端我得到OPTIONS/api/authenticate 403 –
我假設這是一個CORS pre-flight OPTIONS請求。網絡上有很多關於CORS的信息,但https://expressjs.com/en/resources/middleware/cors.html可能是開始閱讀的地方。 – skirtle