javascript - 如何将数据从 Angular 服务发布到 Node ?

标签 javascript node.js angular typescript angular-services

我正在尝试将来自 Angular 服务的数据发布到快速路由,但我没有将数据发送到后端,我从组件收到了对象,现在将其传递到 Node ,但没有到达那里,我已将 bodyParser 添加到 server.js ,知道是什么 Angular 边缺失?

搜索.component.ts

this.searchService.getSearch(this.searchObj1).subscribe(searchObj => {
         // this.detailService.changeMessage(searchObj.data)
       consle.log(searchObj);
        });

搜索.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);
       }
       );
    });

服务器.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);
}

我怀疑您的问题可能与 header 或编码有关,HttpClient 通常不会像 Http 那样出现那么多问题。它还不需要使用 res.json() 映射响应。

<小时/>

您可能已经这样做了,只是没有发布它,但您需要从 api.js 文件导出您的 router 对象:

module.exports = router;

另一个问题是服务器没有将 CORS header 发送回客户端,解决此问题的最简单方法是使用 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 库,我强烈建议您阅读它。

关于javascript - 如何将数据从 Angular 服务发布到 Node ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326111/

相关文章:

javascript - 如何隐藏动态创建的 div?

javascript - 尽管已经使用 npm 安装了 js 库,但我是否需要在 lib 或 vendor 文件夹中保留 js 库的副本?

node.js - V8引擎中Function::Call的第一个参数是什么意思?

node.js - 范围错误 : "port" argument must be >= 0 and < 65536

angular - 如何使用 Angular 和 Flutter(均为 Dart)为工作区设置 VS Code 调试?

javascript - 将 d3 事件从 Javascript 转换为 Typescript (Angular2)

typescript - 扩展 http 类并访问自定义属性(Angular2 typescript )

javascript - Closure Compiler - 使用 jQuery 和 Closure 进行源代码混合编译

javascript - 使用 javascript 删除 'this' 单击的列表元素

javascript - 在javascript中重置表单数组