无法加载资源:net :: ERR_CONNECTION_REFUSED:Node.js

时间:2018-08-29 00:15:17

标签: node.js angular typescript express bootstrap-4

我有一个bootstrap表单,用于angular 6应用程序和nodejs的电子邮件服务,我在我的应用程序中使用nodemailer进行sendemail,不幸的是,它不起作用。我可能会收到以下错误:

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.log(error);
        }
        console.log("The message was sent!");
        console.log(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.log('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);
  }
}

我的代码中缺少什么?

1 个答案:

答案 0 :(得分:1)

  

Failed to load resource: net::ERR_CONNECTION_REFUSED : :3000/contact/send:1

您的错误意味着您的客户端应用程序无法连接到您的nodejs服务器。

修复

您的代码:

const uri = 'http://localhost:3000/contact/send';

如果nodejs服务器正在本地主机上的端口3000上运行,它将可以工作。