node.js - چگونه درخواست POST را در Ionic 2 برای سروری که در localhost اجرا میشود ارسال کنیم؟
در آیونیک از ارائهدهنده سرویس برای دسترسی به HTTP استفاده کردم.
فایل Service.ts به این صورت است. داده یک شیء JSON است.
import { Injectable } from '@angular/core';
import { Http,Headers } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class Service {
constructor(public http: Http) {
console.log('Hello Service Provider');
}
addNewPlace(data:any){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
console.log(data);
this.http.post("http://127.0.0.1:3000/postData/",data);
}
}
فایل app.js نود من به این شکل است
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.get('/',function(req,res){
res.send("Hello_World");
});
app.post('/postData',function(req,res){
console.log(">>>> "+req.body);
res.json('Thank You');
});
app.listen(3000,function(){
console.log('Server running at http://127.0.0.1:3000/');
});
کجا اشتباه میکنم؟ میخواهم شی داده را از اسکریپت سرویس به سرور نود ارسال کنم و آن را در کنسول نمایش دهم. اما با این کد هیچ اتفاقی نمیافتد. و همچنین هیچ خطایی هم وجود ندارد!!!
سرور نود من در پورت ۳۰۰۰ در حال اجرا است.
برنامه آيونيک من در پورت ۸۱۰۰ در حال اجرا است.
پاسخ شماره ۱
مشکل حل شد! مشکل در CORS است.
من cors را نصب کردم و آن را به فایل نود خود وارد کردم. حالا بهطور کامل کار میکند.
var cors = require('cors');
app.use(cors());
کد بالا را به فایل نود خود اضافه کردم.
پاسخ شماره ۲
شما میتوانید از روش زیر برای این کار استفاده کنید.
کامپوننت صفحه شما.
export class MyPage {
constructor(public service : Service){}
// entry method
myPostData(): void {
this.service.postData("http://127.0.0.1:3000/postData/",data)
}
}
کلاس سرویس شما.
@Injectable()
export class Service {
//post data
postData(url: string, body: string): Observable<your-data-type> {
let headers = new Headers();
headers.append('content-type', 'application/json');
let options = new RequestOptions({ headers: headers });
return this.http.post(url, body, options)
.map(this.extractData)
.catch(this.handleError);
}
//to extract data
private extractData(res: Response) {
let body = res.json();
return body || {};
}
//to handle error
private handleError(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
}
