导入模块出现问题

时间:2018-08-13 13:26:58

标签: node.js express node-modules

我的Index.js中有此代码。

var express = require('express');
var router = express.Router();

var check = require('../nodemailer/check.js');
const nodemailer = require('nodemailer');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});


router.get('/checkemail', function(req, res, next) {
var email = 'email';
console.log(email);
check.transporter.sendMail(mailOptions, function(error, info) { 
    if (error) {
        return console.log(error); 
    } 
    console.log('Message sent: %s', info.messageId);
module.exports.email= email;
//console.log(module.exports.email);
  });
 res.render('checkemail', { title: 'check' });
});
module.exports = router;

这在我的check.js中

var nodemailer = require('nodemailer');
var rter = require('../routes/index.js');
//var dho = rter.email;
console.log(rter.email)
var transporter = nodemailer.createTransport({ 
    host: 'server206.web-hosting.com', 
    port: 26, 
    secure: false, // true for 465, false for other ports
    auth: { 
        user: 'noreply@swiftcircle.website', // generated ethereal 
        pass:  'Miracle1994' // generated ethereal password } }); 
    }
});

var mailOptions = { 
    from: 'noreply@swiftcircle.website', 
    to: rter, // list of receivers
    subject: 'Hello', // Subject line 
    //text: 'Hello world?', // plain text body 

    html: '<b>Hello world?</b>' // html body
 };

我成功地从索引中导出了变量'email',但是当我尝试导入时,它在check.js中显示为未定义...

在代码中,我导出了变量电子邮件,然后在check.js中使用“ .property”将其要求并尝试进行console.log,但返回了“ undefined”,我在做什么错了?

2 个答案:

答案 0 :(得分:0)

问题发生在模块的require相互缠绕的情况下。 index.js模块需要第4行的check.js模块;然后check.js模块在​​第2行中需要index.js模块。

这将阻止check.js模块访问index.js模块中的导出变量。

您可能应该考虑如何重构代码,以便以其他方式访问您要访问的email属性(例如,通过使用实用程序模块来获得{{ 1}}属性设置并在适当的时间读取。

答案 1 :(得分:0)

我现在知道了!这就是我的方法...

exports.mail = function mail(x){
    //my codes in my check.js
}

然后,我像这样将其导入到index.js中...

var check = require('../nodemailer/check.js);
check.mail(email);

成功了!