如何将Angular 2 Http.post调用连接到Node.js后端并发送NodeEmailer电子邮件
我对在后端使用node.js是一个全新的概念,但我仍在绞尽脑汁构建一个RESTAPI,并在我的前端调用我的后端。说到这里,我正试图让我的Angular 2应用程序使用nodemailer发送电子邮件。如果我路由到/sendEmail,电子邮件会完美发送,但是当我在表单上单击submit,然后传递一个包含所有表单数据的对象,以便我可以使用NodeEmailer发送时,我会尝试让呼叫运行。任何帮助都将不胜感激!谢谢 Ng2组件HTML如何将Angular 2 Http.post调用连接到Node.js后端并发送NodeEmailer电子邮件,node.js,angular,express,nodemailer,Node.js,Angular,Express,Nodemailer,我对在后端使用node.js是一个全新的概念,但我仍在绞尽脑汁构建一个RESTAPI,并在我的前端调用我的后端。说到这里,我正试图让我的Angular 2应用程序使用nodemailer发送电子邮件。如果我路由到/sendEmail,电子邮件会完美发送,但是当我在表单上单击submit,然后传递一个包含所有表单数据的对象,以便我可以使用NodeEmailer发送时,我会尝试让呼叫运行。任何帮助都将不胜感激!谢谢 Ng2组件HTML <div class="centered two-thir
<div class="centered two-thirds">
<textarea name="project-description"></textarea>
<input type="submit" (ngSubmit)="onSubmit()" name="submit" value="Submit" [disabled]=""class="tcenter centered">
</div>
Ng2业务
sendEmail() {
return this._http.post('/api/sendEmail', {name: 'Foo', email: 'foo@foo.com'})
.map((response: Response) => response.json() )
.toPromise()
.catch(this.handleError);
}
Server.js
// Get Dependencies
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
const nodemailer = require('nodemailer');
// Get our API routes
const api = require('./server/routes/api');
const app = express();
// Parsers for Post Data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Point static path to dist
app.use(express.static(path.join(__dirname, 'dist')));
// Set our api routes
app.use('/api', api);
// Catch all other routes and return the index file
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'));
});
// Get Port from environment and store in express
const port = process.env.PORT || '3000';
app.set('port', port);
const server = http.createServer(app);
server.listen(port, () => console.log(`API running on localhost:${port}`));
/server/routes/api.js
const express = require('express');
const router = express.Router();
const nodemailer = require('nodemailer');
/* GET api listing. */
router.get('/', (req, res) => {
res.send('api works');
});
router.post('/sendEmail', (req, res) => {
console.log(res);
console.log(req);
var smtpConfig = {
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: 'my-email@gmail.com',
pass: 'my-pass'
}
};
var transporter = nodemailer.createTransport(smtpConfig);
var mailOptions = {
from: 'email',
to: 'email',
subject: 'Test',
text: 'test'
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
});
module.exports = router;
控制台错误
POSThttp://localhost:3000/api/sendEmail 404(未找到)
Response{u body:“无法发布/api/sendmail”↵", 状态:404,确定:错误,状态文本:“未找到”,标题:标题…}
SyntaxError:JSON中的意外标记C位于位置0
您遇到了什么错误?顺便说一句,如果您试图构建REST API,您应该仔细阅读RESTful服务和标准。它们都基于名词,以更新资源为中心,而不是基于动词和操作(例如/API/sendEmail端点).Hi@Paul,谢谢你提醒我,我一定会读更多的内容,并相应地调整我的代码。我编辑了带有控制台错误的原始问题。如果我路由到它发送完美,我不知道为什么它在调用时不起作用。刚刚意识到错误…我在前端进行了一次post调用,我的后端调用是get。我改变了app.get到app.post,现在它可以正常工作了。感谢您的帮助,我将查看这些REST API文档。
const express = require('express');
const router = express.Router();
const nodemailer = require('nodemailer');
/* GET api listing. */
router.get('/', (req, res) => {
res.send('api works');
});
router.post('/sendEmail', (req, res) => {
console.log(res);
console.log(req);
var smtpConfig = {
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: 'my-email@gmail.com',
pass: 'my-pass'
}
};
var transporter = nodemailer.createTransport(smtpConfig);
var mailOptions = {
from: 'email',
to: 'email',
subject: 'Test',
text: 'test'
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
});
module.exports = router;