У меня есть форма bootstrap для почтовых служб для приложений angular 6 и nodejs, я использую nodemailer для отправки почты в своем приложении, к сожалению, не работает. Я получаю следующую ошибку:
Failed to load resource: net::ERR_CONNECTION_REFUSED : :3000/contact/send:1
вот форма
<form [formGroup] = "angForm" novalidate>
<div class = "message">
<h3> Write to us </h3>
</div>
<div class = "form__top">
<div class = "form__left">
<div class = "form__group">
<input class = "form__input form__input--name" type = "text" formControlName = "name" placeholder = "name" #name>
</div>
<div *ngIf = "angForm.controls['name'].invalid && (angForm.controls['name'].dirty || angForm.controls['name'].touched)" class = "alert alert-danger">
<div *ngIf = "angForm.controls['name'].errors.required">
Name is required.
</div>
</div>
<div class = "form__group">
<input class = "form__input form__input--email" type = "email" formControlName = "email" placeholder = "email" #email>
</div>
<div *ngIf = "angForm.controls['email'].invalid && (angForm.controls['message'].dirty || angForm.controls['message'].touched)"
class = "alert alert-danger">
<div *ngIf = "angForm.controls['message'].errors.required">
message is required.
</div>
</div>
</div>
<div class = "form__right">
<div class = "form__group">
<textarea class = "form__input form__input--textarea" placeholder = "Message" formControlName = "message" #message
rows = "3"></textarea>
</div>
<div *ngIf = "angForm.controls['message'].invalid && (angForm.controls['message'].dirty || angForm.controls['message'].touched)"
class = "alert alert-danger">
<div *ngIf = "angForm.controls['message'].errors.required">
message is required.
</div>
</div>
</div>
</div>
<flash-messages></flash-messages>
<div class = "form__down">
<div class = "form__group">
<button (click) = "sendMail(name.value, email.value, message.value)" [disabled] = "angForm.pristine || angForm.invalid" class = "form__input form__input--submit" name = "submit" type = "submit" value = "SEND MESSAGE">SEND MESSAGE
</button>
</div>
</div>
</form>
Вот контакт, js (настройки и маршруты почтовой программы узла)
const express = require('express');
const router = express.Router();
const request = require('request');
const nodemailer = require('nodemailer');
router.get('/send', (req, res) => {
const outputData = `
<p>You have a new contact request</p>
<h3>Contact Details</h3>
<ul>
<li>Name: ${req.body.name}</li>
<li>Email: ${req.body.email}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
let transporter = nodemailer.createTransport({
service: 'gmail',
secure: false,
port: 25,
auth: {
user: 'MY EMAIL',
pass: 'THE PASSWORD'
},
tls: {
rejectUnauthorized: false
}
});
let HelperOptions = {
from: '"MYNAME" <MYEMAIL,
to: 'MYEMAIL',
subject: 'Majeni Contact Request',
text: 'Hello',
html: outputData
};
transporter.sendMail(HelperOptions, (error, info) => {
if (error) {
return console.info(error);
}
console.info("The message was sent!");
console.info(info);
});
});
module.exports = router;
вот сервер js.
// server.js
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const path = require('path');
const app = express();
// Port Number
const port = process.env.PORT || 3000
// Run the app by serving the static files
// in the dist directory
app.use(express.static(path.join(__dirname, '/majeni/dist/majeni')));
// Body Parser Middleware
app.use(bodyParser.json());
//routes
const contact = require('./app/routes/contact');
app.use('/contact', contact);
// CORS Middleware
app.use(cors());
// If an incoming request uses
// a protocol other than HTTPS,
// redirect that request to the
// same url but with HTTPS
const forceSSL = function () {
return function (req, res, next) {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(
['https://', req.get('Host'), req.url].join('')
);
}
next();
}
}
// Instruct the app
// to use the forceSSL
// middleware
app.use(forceSSL());
// For all GET requests, send back index.html
// so that PathLocationStrategy can be used
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname + '/majeni/dist/majeni/index.html'));
});
// Start Server
app.listen(port, () => {
console.info('Server started on port '+port);
});
ОБНОВИТЬ
Вот сервис
import { Injectable } from '@angular/core';
import { Headers, Http, Response } from '@angular/http';
import { Jsonp } from '@angular/http';
@Injectable({
providedIn: 'root'
})
export class ContactService {
constructor(private http: Http) { }
sendEmail(name, email, message) {
const uri = 'http://localhost:3000/contact/send';
const obj = {
name: name,
email: email,
message: message,
};
return this.http.post(uri, obj);
}
}
Чего не хватает в моем коде?





Failed to load resource: net::ERR_CONNECTION_REFUSED : :3000/contact/send:1
Ваша ошибка означает, что ваше клиентское приложение не может подключиться к вашему серверу nodejs.
Ваш код :
const uri = 'http://localhost:3000/contact/send';
Будет работать, если сервер nodejs работает на порту 3000 на локальном хосте.
Новый выпуск, новый вопрос. Особенно если вы приняли это как ответ на этот вопрос :)
@msbit вот иди, босс stackoverflow.com/questions/52068069/…
Ваше право, но теперь у меня следующая ошибка
home:1 Failed to load http://localhost:3000/contact/send: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access, что мне нужно изменить в моих кодах?