2017-10-12 29 views
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); 
+0

看看我給這裏的答案可以幫助:https://stackoverflow.com/questions/46661599/node-js-converting-array-字符串和添加斜槓到它/ 46672389#46672389總之,你的'內容類型'應該是'application/json',而不是'application/x-www-form-urlencoded'。 – skirtle

+0

感謝您的快速回復!我試過,儘管在服務器端我得到OPTIONS/api/authenticate 403 –

+0

我假設這是一個CORS pre-flight OPTIONS請求。網絡上有很多關於CORS的信息,但https://expressjs.com/en/resources/middleware/cors.html可能是開始閱讀的地方。 – skirtle

回答

1
import { Http, URLSearchParams } from '@angular/http'; 


//make url params 

let body = new URLSearchParams(); 
    body.append('email', '[email protected]'); 
    body.append('pin', '123456'); 

使用URLSearchParams的身體,而不是檢查