异步调用函数的 NodeJs 错误

巴勃罗

抱歉我的英语,我希望有人可以帮助我,我尝试使用 gmail 作为 smtp 发送模板电子邮件,在同一个文件 server.js 文件中一切正常,但我试图在不同的模块中分离,并且在调用时出现错误相同的功能,我在调试模式下收到空错误

TypeError: Cannot read property 'then' of undefined
    at Object.exports.sendmail (/src/react/impex/jumbo-react-flat/mailing/server.js:44:4)
    at exports.sendregistermail (/src/react/impex/jumbo-react-flat/mailing/controllers/mailing.js:25:10)
    at Layer.handle [as handle_request] (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/layer.js:95:5)
    at next (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/layer.js:95:5)
    at /src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/index.js:335:12)
    at next (/src/react/impex/jumbo-react-flat/mailing/node_modules/express/lib/router/index.js:275:10)
    at jsonParser (/src/react/impex/jumbo-react-flat/mailing/node_modules/body-parser/lib/types/json.js:109:7)

在控制台我得到

/src/react/impex/jumbo-react-flat/mailing/node_modules/express-mailer/lib/express-mailer.js:81
          callback(null, res.message);
          ^

TypeError: callback is not a function
    at MailComposer.returnCallback (/src/react/impex/jumbo-react-flat/mailing/node_modules/express-mailer/lib/express-mailer.js:81:11)

我的代码

服务器.js

// call the packages we need
var express = require('express');  // call express
var bodyParser = require('body-parser');
path=require('path');
var app = express(); // create a server
var port = process.env.PORT || 8002;  // set our port
var mailer = require('express-mailer'); // call express
var promise = require('promise');


// set the view folder to views
app.set('views', __dirname + '/views');
// set the view engine to pug
app.set('view engine', 'pug');

app.use(bodyParser.json());

var routes = require('./routes/routes'); //importing route
routes(app); //register the route

// test route to trigger emails
// Configure express-mail and setup default mail data.
mailer.extend(app, {
  from: '[email protected]',
  host: 'smtp.gmail.com', // hostname
  secureConnection: true, // use SSL
  port: 465, // port for secure SMTP
  transportMethod: 'SMTP', // default is SMTP. Accepts anything that nodemailer accepts
  auth: {
    user: 'user', // gmail id
    pass: 'pass' // gmail password
  }
});



app.listen(port, function () {
  console.log(`Escuchando en el puerto ${port}!`);
});

  // Send email.
  exports.sendmail = function (template, mailOptions) {
    app.mailer.send(template, mailOptions)
   .then(function (err) {
     debugger
      if (err) {
        return err;
      }
      return ;
    });
    }

邮寄.js

var express = require('express');
var request = require('request');
var server = require('../server.js');
var Promise = require('promise');


exports.sendregistermail = function (req, res) {
res.header('Content-Type', 'application/json');
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type');

    // Setup email data.
    var mailOptions = {
      to: '[email protected]',
      subject: 'Registro en Impex Flowers',
      user: { // data to view template
        name: 'Polo Onofa',
        thanks: 'Gracias por registrarte en impex FLowers',
        message: 'Un representante se comunicara contigo para completar tu registro'
      }
    }

    // Send email.

  server.sendmail('emailorden', mailOptions, function (err) {
    if (err) {
      console.log(err);
      res.send('Ocurrio un error al enviar tu email');
      return;
    }
    return res.send('Email enviado correctamente!');
  });


  };

非常感谢你的帮助

侧风

mailer.send() 返回的是回调而不是承诺,因此您不能在此处使用 .then()。您应该按如下方式更改您的功能:

exports.sendmail = function (template, mailOptions) {
    app.mailer.send(template, mailOptions, function (err) {
        if (err)
            return err;
        return ;
    });
}

关于重构代码的目标要重要得多:由于您正在创建一个用于发送邮件的模块,因此所有与邮件相关的内容都应该放在那里。mailer.extend()以及sendmail()应该搬到那里去。确保将您的实例传递app给 mailing.js,以便您可以初始化快递邮件程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

nodejs- 在函数内执行多个异步调用的最佳方法?

来自分类Dev

错误处理-异步调用

来自分类Dev

Twitter异步调用中共享错误

来自分类Dev

Nodejs异步函数原型链错误

来自分类Dev

Nodejs异步调用排水回调完成之前

来自分类Dev

如何处理 lambda nodejs 中的异步调用

来自分类Dev

改造获取失败的响应正文(RetrofitError错误)-异步调用

来自分类Dev

NODEJS:在类外部调用异步函数

来自分类Dev

异步函数到Nodejs调用ruby文件

来自分类Dev

Nodejs 异步可重用函数调用

来自分类Dev

异步调用模板函数

来自分类Dev

NodeJS:调用异步函数时,异步工作是谁?

来自分类Dev

使用Async.parallel,我的参数寿命不会超过使用MongoDB的NodeJS中的异步调用

来自分类Dev

在nodejs-request中的多个异步调用期间获取原始请求对象

来自分类Dev

nodejs异步调用,如何处理一个URL上的多个请求

来自分类Dev

如果View Controller不再存在,则在异步调用中出现错误

来自分类Dev

Angularfire-异步调用后$ scope不会更新,并且$ apply引发错误

来自分类Dev

如果View Controller不再存在,则在异步调用中出现错误

来自分类Dev

React 中的双重渲染与 componentDidMount 中的异步调用导致错误

来自分类Dev

承诺在错误 Nodejs 中递归调用

来自分类Dev

回调不是函数错误 [Nodejs]

来自分类Dev

nodeJS:forEach 循环不是函数,错误

来自分类Dev

如何异步调用AWS Lambda函数

来自分类Dev

Knockout计算函数内部的异步调用

来自分类Dev

lua同步调用C异步函数

来自分类Dev

在OCaml中异步调用函数

来自分类Dev

异步调用的函数语法

来自分类Dev

lua同步调用C异步函数

来自分类Dev

如何异步调用AWS Lambda函数

Related 相关文章

热门标签

归档