2017-02-05 26 views
0

私はNode.jsで私のサーバを準備しました(Chrome Postmanでテスト済みで、すべて正常です)。 Ubuntu 16.04 Server仮想マシンにインストールされ、ホストマシン(win7)からすべてをテストします。その後、仮想マシンにIonic2フレームワークを追加してフロントエンドの開発を開始しましたが、リクエストPOSTを送信する際に問題があります。 Ionic2:POST要求が動作しない

は、私は次のコードでprovaider作成:

import { Injectable } from '@angular/core'; 
import { Http, Headers } from '@angular/http'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class MyProvider1 { 

data: any; 

constructor(public http: Http) { 
    this.data = null; 
} 

login(id,pwd){ 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    this.http.post('http://localhost:8080/', 
        JSON.stringify({ 
         username: id , 
         password: pwd 
        }), {headers: headers}) 
       .subscribe(res => { 
        console.log(res.json()); 
       });  
} 
} 

それは作業しなければならないのが、ログイン機能が呼び出されたときに、私のNode.jsサーバは奇妙な要求をログに記録します。

OPTION/200 0.348ms -13

POSTの代わりにリクエスト。また、私のホストChromeブラウザにコンソールは、次の失敗を示しています

のXMLHttpRequestがhttp://localhost:8080/をロードすることはできません。 プリフライト要求に応答してアクセス制御チェックを通過しません。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。したがって、オリジン 'http://localhost:8100'は許可されません。

ただ裁判のために私は{headers: headers}を取り除き、http.postになった:モルガンは私のNode.jsでPOST要求をログに記録しますが、私はconsole.log(req.body)をすればreq.bodyは(空である。このように

this.http.post('http://localhost:8080/', 
         JSON.stringify({ 
          username: id , 
          password: pwd 
         })) 
        .subscribe(res => { 
         console.log(res.json()); 
        }); 

出力は{}になります)。

念のために、私は私のサーバーのNode.jsのコードの以下の部分で投稿:

... 
router.route('/') 
    .get(function(req,res){ 
     res.end('Welcome'); 
    }) 
    .post(function(req,res){ 
    UsersManager.login(req.body.username,req.body.password,function(err,user){ 
      if(err) throw err; 
      if(!user){ 
       res.json({ 
          success: false, 
          message: Const.notificationTokenAccessNOK 
         }); 
      }else{ 
       var token = TokenManager.createToken(user); 
       res.json({ 
          success: true, 
          message: Const.notificationTokenAccessOK, 
          token: token 
       }); 
      } 
     }); 
    }); 

module.exports = router; 

答えて

1

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var mongoose = require('mongoose'); 

//------------------------------------ 
//Configuration 
//------------------------------------ 
var config = require('./config.js'); 
var port = process.env.PORT || config.SERVICE_PORT; 
app.use(morgan('dev')); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

//------------------------------------ 
//Routes 
//------------------------------------ 
app.use('/admin', require('./app/routes/admin.js')); 
app.use('/',  require('./app/routes/guest.js')); 
app.use('/chat', require('./app/routes/chat.js')); 

//------------------------------------ 
//Server Start 
//------------------------------------ 
mongoose.connect(config.database); 
app.listen(port); 
console.log('server start at port ' + port); 

そして、私の/app/routes/guest.jsは、次のコードが含まれています

あなたはionic2コードからネットワークリクエストを(少なくとも直接ではなく)実行することはできません。

しかし、あなたがしたい場合は以下のように、あなたはionic.config.jsonファイルにプロキシを置くことができます。

{ 
     "proxies": [{ 
       "path": "/localhost/", 
       "proxyUrl": "http://localhost:8080/" 
      }] 
} 

以下のように、あなたはPOSTリクエストを実行することができます。

this.http.post('/localhost/', 
         JSON.stringify({ 
          username: id , 
          password: pwd 
         })) 
        .subscribe(res => { 
         console.log(res.json()); 
        }); 
+0

はい!それはCORSの問題であり、あなたの指示に従ってプロキシを設定することによって動作します。どうもありがとう – pittuzzo

関連する問題