文件EmailAPI.js:
var nodemailer = require('nodemailer');
var router = express.Router();
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'abc@gmail.com',
pass: '111111'
}
});
let mailOptions = {
from: 'abc@gmail.com',
to: 'xzy@gmail.com',
subject: 'Test Mailer',
text: 'I am testing Nodemailer to send email.',
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message %s sent: %s', info.messageId, info.response);
});
File Angular 2:email.services.ts
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
@Injectable()
export class EmailService {
constructor(private http: Http ) { }
public VerifyEmail() {
}
}
答案 0 :(得分:1)
您需要在服务中构建一个http呼叫,该呼叫将指向您的Node
应用。
我最近在gist
- Angular 2 call Node Service
GitHub
请原谅Gist
我的雷达上的格式来设置它的样式。
<强>更新强>
您需要在节点项目中做的第一件事就是设置route
我注意到您已声明var router = express.Router();
,但您实际上并没有使用它。
因此,根据我指定的gist
,您可以执行以下操作:
var express = require('express')
var app = express();
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'abc@gmail.com',
pass: '111111'
}
});
let mailOptions = {
from: 'abc@gmail.com',
to: 'xzy@gmail.com',
subject: 'Test Mailer',
text: 'I am testing Nodemailer to send email.',
};
app.options('/sendmail', function (req, res) {
res.sendStatus(200);
});
app.post('/sendmail', function (req, res) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200'); // Change this to your Angular 2 port number
res.setHeader('Access-Control-Request-Method', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Headers', '*');
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message %s sent: %s', info.messageId, info.response);
});
})
我假设您的node
项目是此Angular 2
项目的单独解决方案。然后,您需要导航到node
项目的根目录并运行node EmailAPI.js
,这将在您的Angular 2
应用程序的单独端口下运行。 注意运行node EmailAPI.js
后,将显示正在运行的端口。
现在,在您的Angular 2
应用程序中,您构建了Http
来电:
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
@Injectable()
export class EmailService {
constructor(private http: Http ) { }
public VerifyEmail() {
return this.http.post(`http://localhost:3000/sendmail`, null, null).map(res => res.json());
}
}
注意您将在通话中看到http://localhost:3000
,将其更改为运行node EmailAPI.js
后显示的端口名称。
我认为可能适合的其他信息,我强烈建议您查看Postman - Testing your API's这将有助于调试您可能遇到的任何错误 - 如果有的话。