Angular向Node.js的发布请求未发送

时间:2018-10-02 14:32:22

标签: javascript node.js angular request rxjs

我的目标很简单:我想从Angular 并通过http向我的node.js发送发帖请求

但是,未收到请求。

这是我的Angular代码

const Data =  [{
'name' : this.userForm.controls.name.value,
'email' : this.userForm.controls.email.value,
'Object': this.userForm.controls.Object.value,
'message': this.userForm.controls.message.value
}];
console.log('ready to send');
this.http.post('http://localhost:8012/sendmail', Data).subscribe();

我只是在数据中格式化数据以发送数据。这是我所有尝试的一部分。 该网址很好,因为我使用get方法进行了测试,并且可以正常工作!


现在在Node.js中

const express = require('express');
const path = require("path");
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

var db = mongoose.connect("mongodb://localhost:27017/test", 
function( err, response){
if(err){console.log(err);}
});

var app = express();
app.use(bodyParser());
app.use(bodyParser.json({limit:'10mb'}));
app.use(bodyParser.urlencoded({extended:true}));

app.use(function(req,res,next){
res.setHeader('Access-Control-Allow-
Origin','http://localhost:4200');
res.setHeader('Access-Control-Allow-
Methods','http://localhost:4200','POST');
res.setHeader('Access-Control-Allow- 
Credentials','http://localhost:4200', true);
next();
});

app.post("/sendmail",function (req, res, next){
console.log("wddddddf");
res.end('buck');
})


app.listen(8012, ()=>{
console.log('waf waf 8012 waf waf');
})

在这里我只想接收数据和console.log ,以了解它是否正常工作。


我的问题是请求似乎无法到达我的节点

有人可以帮助我理解原因吗?


编辑:订阅仍然无法使用。我遇到这个错误:

enter image description here

4 个答案:

答案 0 :(得分:2)

经过数小时的搜索,我找到了解决方案: 我将此行添加为setHeader:

res.setHeader( 'Access-Control-Allow-Headers', 'Accept,Accept- 
Language,Content-Language,Content-Type');

答案 1 :(得分:1)

由于您尚未订阅post请求,因此未发送您的请求

this.http.post('http://localhost:8012/sendmail', Data)
            .subscribe((result) => console.log(result));

答案 2 :(得分:0)

您需要订阅post请求:

this.http.post('http://localhost:8012/sendmail', Data)
    .subscribe();

角度Http和版本4.3 HttpClient起,使用RxJS流将数据发送(使用RxJS术语发射)到后端。这些流是延迟计算的,这意味着除非订阅了某些内容,否则它们将不会发出任何值。 因此,您需要像这样构造您的http调用:

    this.http.post(url, data)
        .map((response) => {    //optional
           //map over data - do some computation
        })
        .subscribe();

通常,前4行在服务中-包裹在返回Observable()的函数中,.subscribe()块在调用服务方法的组件中。

答案 3 :(得分:0)

您需要从@ angular / common / http导入HttpClient,如下所示。

import {HttpClient, HttpHeaders} from '@angular/common/http';

查看是否有效。