Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Javascript 如何从按钮调用post请求?节点快车_Javascript_Node.js_Express_Angular5 - Fatal编程技术网

Javascript 如何从按钮调用post请求?节点快车

Javascript 如何从按钮调用post请求?节点快车,javascript,node.js,express,angular5,Javascript,Node.js,Express,Angular5,如何通过单击按钮调用控制器? 我试过当邮递员,效果很好。。但我不能把它调到我前端的按钮上 我正在使用NodeEmailer和node express发送电子邮件 这是我的密码 这是正确的吗提前谢谢 我正在计算我的代码是否正确 mailController.js // mail controller routes var express = require('express'); var router = express.Router(); var nodemailer = require('n

如何通过单击按钮调用控制器? 我试过当邮递员,效果很好。。但我不能把它调到我前端的按钮上

我正在使用NodeEmailer和node express发送电子邮件

这是我的密码

这是正确的吗提前谢谢

我正在计算我的代码是否正确

mailController.js

// mail controller routes
var express = require('express');
var router = express.Router();
var nodemailer  = require('nodemailer');

// get /api/mail/
router.get('/send-email', (req,res) => {
  res.send('GET response');
});

// post /api/mail/
router.route('/send-email').post((req,res) => {
  let transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        type: 'OAuth2', 
        user: 'dev.xxx@gmail.com',
        clientId: 'xxx-xxx.apps.googleusercontent.com',
        clientSecret: 'SY0-xxxx',
        refreshToken: '1/xxx',
        accessToken: 'ya29.xxx-xxx-xxx-xxx'
      }
  })

  let mailOptions = {
    from: 'FReyes <dev.xxx@gmail.com>',
    to: 'xxx@gmail.com',
    subject: 'Nodemailer test',
    text: 'Hello World!!'
  }

  transporter.sendMail(mailOptions, function (err, res) {
    if(err){
      console.log('Error');
    } else {
      console.log('Email Sent');
    }
  })
});

// put /api/mail/
router.put('/send-email',(req,res) => {
  res.send('PUT response');
});

// delete /api/mail/
router.delete('/send-email',(req,res) => {
  res.send('DELETE response');
});

module.exports = router;
    var express     = require('express');
    var bodyParser  = require('body-parser');
    var nodemailer  = require('nodemailer');

    var app         = express(); // Please do not remove this line, since CLI uses this line as guidance to import new controllers

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

    app.use(function(req, res, next) {
      // console.log(req);
      res.setHeader('Access-Control-Allow-Origin', '*');
      res.setHeader('Access-Control-Allow-Credentials', 'true');
      res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
      res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers');

      //and remove cacheing so we get the most recent comments
      res.setHeader('Cache-Control', 'no-cache');
      next();
    });

    var mailController = require('./controllers/mailController');
    app.use('/api/mail', mailController);

    app.listen(process.env.PORT || 5015, () => {
      console.log('Server is running');
    });
  sendMail() {    
    const data = {
        to: 'xxx@gmail.com',
        subject: 'Subject',
        txt: 'hello world'
    };
    console.log('asd');
    return this.http.post('localhost:5015/api/mail/send-email', data).map((response: Response) =>{
      console.log (response.json());
    });
  }
联系人.组件.ts

// mail controller routes
var express = require('express');
var router = express.Router();
var nodemailer  = require('nodemailer');

// get /api/mail/
router.get('/send-email', (req,res) => {
  res.send('GET response');
});

// post /api/mail/
router.route('/send-email').post((req,res) => {
  let transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        type: 'OAuth2', 
        user: 'dev.xxx@gmail.com',
        clientId: 'xxx-xxx.apps.googleusercontent.com',
        clientSecret: 'SY0-xxxx',
        refreshToken: '1/xxx',
        accessToken: 'ya29.xxx-xxx-xxx-xxx'
      }
  })

  let mailOptions = {
    from: 'FReyes <dev.xxx@gmail.com>',
    to: 'xxx@gmail.com',
    subject: 'Nodemailer test',
    text: 'Hello World!!'
  }

  transporter.sendMail(mailOptions, function (err, res) {
    if(err){
      console.log('Error');
    } else {
      console.log('Email Sent');
    }
  })
});

// put /api/mail/
router.put('/send-email',(req,res) => {
  res.send('PUT response');
});

// delete /api/mail/
router.delete('/send-email',(req,res) => {
  res.send('DELETE response');
});

module.exports = router;
    var express     = require('express');
    var bodyParser  = require('body-parser');
    var nodemailer  = require('nodemailer');

    var app         = express(); // Please do not remove this line, since CLI uses this line as guidance to import new controllers

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

    app.use(function(req, res, next) {
      // console.log(req);
      res.setHeader('Access-Control-Allow-Origin', '*');
      res.setHeader('Access-Control-Allow-Credentials', 'true');
      res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
      res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers');

      //and remove cacheing so we get the most recent comments
      res.setHeader('Cache-Control', 'no-cache');
      next();
    });

    var mailController = require('./controllers/mailController');
    app.use('/api/mail', mailController);

    app.listen(process.env.PORT || 5015, () => {
      console.log('Server is running');
    });
  sendMail() {    
    const data = {
        to: 'xxx@gmail.com',
        subject: 'Subject',
        txt: 'hello world'
    };
    console.log('asd');
    return this.http.post('localhost:5015/api/mail/send-email', data).map((response: Response) =>{
      console.log (response.json());
    });
  }
html

<input type="button" value="test" (click)="sendMail(data)">

不要忘记在map函数中添加协议名称和返回值

sendMail() {
  const data = {
    to: 'xxx@gmail.com',
    subject: 'Subject',
    txt: 'hello world'
  };
  console.log('asd');
  return this.http.post('http://localhost:5015/api/mail/send-email', data).subscribe(data => console.log(data));
}

听起来你要问的是当点击一个按钮时如何调用
sendMail()
,而你的整个服务器邮件代码与这个问题无关?是的。。。我想知道在单击sendMail()按钮时如何调用post函数确定。。。当然,我有@ChrisG按钮,但是我在该按钮中的函数不能调用serverOk,所以你可以在控制台中看到
asd
,然后会发生什么?对,我完全错过了格式错误的URL。抢手货也不请求在中发布帖子button@RichardFreyReyes另外,请在您添加的位置添加模板代码click@RichardFreyReyes没有数据(sendMail(data))@RichardFreyReyes我已经更新了我的答案,你可以再试一次