簡體   English   中英

如何將數據從角度服務發布到節點?

[英]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/httpHttp類沒有問題,但是它們現在已在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM