2016-04-17 7 views
0

Angular 2 Typescriptアプリケーションで正常なHTTPリクエストを送信できない理由を診断できないようです。私はPostmanを通じてPOSTリクエストを正常に送信しますが、フロントエンドはバックエンドにリンクすることに不満があるようです...エラーはなく、バックエンドは決して応答しません。助けてください!角2ノード/ Express Serverエンドポイントへのリクエスト

私はC9環境で作業しています。ここで

は私の現在の実装です:

import {Component} from 'angular2/core'; 
import {MessageBody} from '../message-body/message-body'; 
import {Http, HTTP_PROVIDERS, Headers} from 'angular2/http'; 

@Component({ 
    selector: 'signup', 
    template: require('app/signup/signup.html'), 
    styles: [require('app/signup/signup.css')], 
    viewProviders: [HTTP_PROVIDERS], 
    providers: [] 
}) 

export class Signup { 
    model = new MessageBody(
    '', 
    '', 
    '', 
    ''); 
    constructor(public http: Http) { 
    } 
    onSubmit() { 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
    this.http.post('/email', JSON.stringify(this.model), {headers: headers}) 
     .map(res => console.log(res.json())); 
    } 
} 

これは、サーバー上のエンドポイントである:

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

app.post('/email', sendEmail); 

app.use(express.static(__dirname +'/../dist')); 

app.listen(process.env.PORT, listen); 

私は無駄に/emailhttp://localhost:8080/emailhttps://{appName}-{username}.c9users.io/email、全てに投稿しようとしました!

私は間違っていますか?私は助けに感謝します!

編集:ティエリーはすでにここで答えているので、これは欺瞞です。 angular2: http post not executing

+0

これはアプリケーションが最初にロードされたURLと同じですか+ポートですか? –

+0

@GünterZöchbauerはい – Hello

答えて

3

コンテンツタイプと、POSTメソッドに提供するコンテンツとの間に不一致があります。

あなたはURLエンコード形式を期待する場合は、あなたのコードをこのように更新する必要があります。

onSubmit() { 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

    var content = new URLSearchParams(); 
    content.set('somefield', this.model.somefield); 
    (...) 

    this.http.post('/email', content.toString(), {headers: headers}) 
    .map(res => console.log(res.json())); 
} 

あなたはJSONの内容を送信したい場合は、単にContent-Typeヘッダの値を変更します。

onSubmit() { 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    this.http.post('/email', JSON.stringify(this/model), {headers: headers}) 
    .map(res => console.log(res.json())); 
} 

また、私はあなたがこのような何かであなたのExpressアプリケーションを通してそれを提供しない限り、エンドポイントが同じマシンにないと思います:

app.use(express.static('public')); 
+0

@ thierryのクイックレスありがとう!私のContent-Typeとして 'application/json'を送信すると、私の以前の実装はなぜ機能しないのでしょうか?私もそれを試みた。 私は今あなたの実装を試みています。私はあなたを更新しておきます。 – Hello

+0

あなたは大歓迎です! 「以前の実装」とはどういう意味ですか? –

+0

ああ、編集が私の質問に答えました。私は本質的に、私が上記の 'application/x-www-form-urlencoded'と比べて 'application/json'と私のコンテンツタイプを入れ替えてもうまくいくかどうかを尋ねていました。 あなたの提案はどちらもうまくいきませんでした... もう少しデバッグノート:私はそこにログインしようとしたのでonSubmit関数を打つことがわかりました。またthis.http.postも私が期待する関数です。私のバックエンドは決してアプリケーションを通じてPOST要求を受け付けていないようです。しかし、それはPostmanを通じて受け入れることになります FYI解決策には編集があります:JSON.stringify(this.model) – Hello

関連する問題