Отправить запрос в Angular на Node.js не отправляет - PullRequest
0 голосов
/ 02 октября 2018

Моя цель проста: я хочу отправить почтовый запрос из Angular и через http на мой node.js

Но запрос не получен.

Вот мой угловой код

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();

Я просто форматирую свои данные в Data, чтобы отправить их. Это было частью моей попытки.URL хороший, так как я тестирую методом 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');
})

Здесь Я просто хочу получить данные и консоль.log знать, что он работает.


Моя проблема в том, что запрос не может достичь моего узла .

Может кто-то могпомогите мне понять почему?


Редактировать: он все еще не работает с подпиской.У меня есть эта ошибка:

enter image description here

Ответы [ 4 ]

0 голосов
/ 03 октября 2018

После нескольких часов поиска я нашел решение: я добавляю эту строку как setHeader:

res.setHeader( 'Access-Control-Allow-Headers', 'Accept,Accept- 
Language,Content-Language,Content-Type');
0 голосов
/ 02 октября 2018

Вам необходимо подписаться на post запрос:

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

Angular 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() находится в компонентевызов метода обслуживания.

0 голосов
/ 02 октября 2018

Вам необходимо импортировать HttpClient из @ angular / common / http, как показано ниже.

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

Посмотрите, работает ли оно.

0 голосов
/ 02 октября 2018

Ваш запрос не отправляется, потому что вы не подписались на post запрос

this.http.post('http://localhost:8012/sendmail', Data)
            .subscribe((result) => console.log(result));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...