2017-08-22 1 views
1

Newbie hier versuchen, einen Zugriff auf das Senden von Kontaktformular Daten von Angular 2 zu einem Knoten/Express-Server ... Im Moment hosste ich Angular 2 mit dem eingebauten Server bei localhost: 4200 und der Express-Server bei localhost: 3000. Ich habe versucht, den folgenden Code, aber ich erhalte die folgende Fehlermeldung:POST von Winkel 2 zum Express-Server

Error: ENOENT: no such file or directory, stat 'C:\Users\corey\Desktop\Project\server\api\contact-form-submit' 

Hier ist meine Kontakt form.component.ts Datei ist:

import { Component, OnInit } from '@angular/core'; 
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 
import { HttpClient } from '@angular/common/http'; 


@Component({ 
    selector: 'app-contact-form', 
    templateUrl: './contact-form.component.html', 
    styleUrls: ['./contact-form.component.css'] 
}) 
export class ContactFormComponent { 

    constructor(private http: HttpClient) {} 

    onSubmit(form) { 
     this.http.post('http://localhost:3000/server/api/contact-form-submit', JSON.stringify(form.value)).subscribe(); 
     console.log(form.value); 
    } 


} 

Hier ist meine server.js Datei:

var express = require('express'); 
var nodemailer = require('nodemailer'); 
var mg = require('nodemailer-mailgun-transport'); 
var bodyParser = require('body-parser'); 
var app = express(); 
var path = require('path'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 

//trying to get contact form submission from angular 2 form here 
app.get('/', function (req, res) { 
    res.sendfile('./api/contact-form-submit'); 
    console.log('test'); 
}); 

//api key and domain for mailgun 
var auth = { 
    auth: { 
    api_key: 'api-key-here', 
    domain: '[email protected] here' 
    } 
} 

//trying to send email with nodemailer here 
app.post('./api/send', function(req, res) { 
    var transporter = nodemailer.createTransport(mg(auth)); 

    var mailOptions = { 
     from: '[email protected]', 
     to: '[email protected]', 
     subject: 'Website submission', 
     text: 'Name: ' + req.body.name + 'Email: ' + req.body.email + 'Message: ' + req.body.message, 
     html: '<p>Submission: </p><br><ul><li>Name: ' + req.body.name + '</li><li>Email: ' + req.body.email + '</li><li>Message: ' + req.body.message + '</li></ul>' 
    }; 

    transporter.sendMail(mailOptions, function(error, info) { 
     if (error) { 
      console.log(error); 
      res.redirect('/'); 
     } else { 
      console.log('Message sent.'); 
      res.redirect('/'); 
     } 
    }) 

}); 

app.listen(3000, function() { 
    console.log('Express started on port 3000'); 
}); 

Ich bekomme erfolgreiche Formulardaten innerhalb Angular 2 zu verwenden, und ich hatte den Express-Server E-Mails mit einem regulären Express-Post/Get mit HTML-Dateien senden ... aber ich verstehe nicht einen wichtigen Teil der Integration von Angular w ie Express und verwenden Sie es, um eine E-Mail mit Nodemailer zu senden. Irgendwelche Hilfe hier? Vielen Dank. This is my project structure.

+0

versuchen Ihre api Route url von 'app.post chaning ('./ api/senden',' zu 'app.post ('/ api/senden', '(ohne den Punkt) – Sgnl

+0

auch der Fehler könnte sein, weil der Server kann nicht die Datei, die Sie wollen, aus dieser Zeile' res.sendfile ('./ api/contact-form-submit'); '. Da es versucht zu lesen von das Dateisystem und vielleicht ist die Datei nicht da, also wirft es den Fehler, dass es keine Datei finden kann. – Sgnl

Antwort