[英]How to retrieve data from a RESTful service as a post request in angular js?
[英]how to post data from angular service to node?
我正在嘗試從角度服務發布數據以表達路線,我沒有獲取數據到后端,我現在從組件接收到的對象傳遞給節點,但是沒有到達那里,我已經將bodyParser添加到server.js,任何想法角度都缺少邊?
search.component.ts
this.searchService.getSearch(this.searchObj1).subscribe(searchObj => {
// this.detailService.changeMessage(searchObj.data)
consle.log(searchObj);
});
search.service.ts
import { Injectable } from '@angular/core';
import { HttpClient,HttpHeaders } from '@angular/common/http';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class SearchService {
constructor(private http: Http) { }
getSearch(searchObj:{}) {
let body = JSON.stringify(searchObj);
console.log('Fac',body);
return this.http.post('/api/search',body)
.map(res => res.json());
}
}
路線/ api.js
const express = require('express');
const router = express.Router();
const request = require('request');
// declare axios for making http requests
const axios = require('axios');
const API = 'https://jsonplaceholder.typicode.com';
router.post('/search', (req, response) => {
// Get posts from the mock api
console.log('CLientReq',req.body);
request.post('http://sla/service/getHistoricEvents',
{ json: true,
body: req.body,
proxy:'http://one.proxy.att.com:8080',
headers: {
"content-type": "application/json",
"authorization": "Basic bTA5NDg1QGNvbXMuYXR0LmNvbTpjYnVzTVNAMjAxNw=="
}
},
function(err, res, body) {
response.status(200).json(body);
}
);
});
server.js
// Get dependencies
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
// Get our API routes
const api = require('./server/routes/api');
const Oploggery = require('Oploggery');
const app = express();
// Parsers for POST data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
// Point static path to dist
app.use(express.static(path.join(__dirname, 'dist')));
// Set our api routes
app.use('/api', api);
// Catch all other routes and return the index file
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'));
});
const port = process.env.PORT || '3000' || '4200';
app.set('port', port);
/**
* Create HTTP server.
*/
const server = http.createServer(app);
server.listen(port, () => console.log(`API running on localhost:${port}`));
盡管@angular/http
和Http
類沒有問題,但是它們現在已在Angular 5中棄用,並且自4.3版以來已經可以使用替代方法,請嘗試使用HttpClient
類:
constructor(private httpClient: HttpClient) { }
getSearch(searchObj:{}) {
console.log('Fac', searchObj);
return this.httpClient.post('/api/search', searchObj);
}
我懷疑您的問題可能與標頭或編碼有關, HttpClient
通常沒有Http
那樣多。 它還不需要將響應映射到res.json()
。
您可能已經在執行此操作,而您並未發布它,但是您需要從api.js
文件中導出router
對象:
module.exports = router;
另一個問題是服務器沒有將CORS標cors
送回客戶端,解決此問題的最簡單方法是使用cors
庫: https : //github.com/expressjs/cors
最簡單的是,您可以對server.js
文件執行以下操作:
// Get dependencies
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
const cors = require('cors'); // Add this after installing the cors library.
// Get our API routes
const api = require('./server/routes/api');
const Oploggery = require('Oploggery');
const app = express();
app.use(cors()); // Add this.
但是,如果您要使用它,我強烈建議您閱讀CORS和cors
庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.