Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Angular 2 Http.post调用连接到Node.js后端并发送NodeEmailer电子邮件_Node.js_Angular_Express_Nodemailer - Fatal编程技术网

如何将Angular 2 Http.post调用连接到Node.js后端并发送NodeEmailer电子邮件

如何将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

我对在后端使用node.js是一个全新的概念,但我仍在绞尽脑汁构建一个RESTAPI,并在我的前端调用我的后端。说到这里,我正试图让我的Angular 2应用程序使用nodemailer发送电子邮件。如果我路由到/sendEmail,电子邮件会完美发送,但是当我在表单上单击submit,然后传递一个包含所有表单数据的对象,以便我可以使用NodeEmailer发送时,我会尝试让呼叫运行。任何帮助都将不胜感激!谢谢

Ng2组件HTML

<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;