You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS中使用node-mailjet模块出现default导出错误求助

React项目中使用node-mailjet出现"无default导出"错误的解决方案

问题详情

在ReactJS(基于Vite)项目中使用node-mailjet模块时,触发以下错误:

"The requested module '/node_modules/.vite/deps/node-mailjet.js?v=523d8493' does not provide an export named 'default'."

已通过npm安装node-mailjet包,且严格遵循官方文档编写代码,但运行项目时该错误持续出现。

用户原代码:

import Mailjet from 'node-mailjet';
// const Mailjet = require(['node-mailjet']);

const API_KEY = '******';
const API_SECRET = '******';

const mailjet = new Mailjet({
  apiKey: API_KEY,
  apiSecret: API_SECRET,
});

const sendEmail = async () => {
  // const mailjetClient = Mailjet.apiConnect(API_KEY, API_SECRET);

  const request = mailjet.post('send', { version: 'v3.1' }).request({
    Messages: [
      {
        From: {
          Email: 'john@doe.com',
          Name: 'Mailjet Pilot',
        },
        To: [
          {
            Email: 'johndoe@gmail.com',
            Name: 'passenger 1',
          },
        ],
        Subject: 'Your email flight plan!',
        HTMLPart: '<h3>Dear passenger 1, welcome to <a href="https://www.mailjet.com/">Mailjet</a>!</h3><br />May the delivery force be with you!',
      },
    ],
  });

  try {
    const response = await request;
    console.log(response.body);
  } catch (error) {
    console.log('MAILJET ERROR', error.message);
  }
};

export default sendEmail;

错误原因

node-mailjet v5及以上版本采用ES模块规范,仅提供命名导出,不再支持默认导出。原代码使用import Mailjet from 'node-mailjet'的默认导入方式,因此触发导出不存在的错误。

另外需要重点注意:node-mailjet是服务端模块,绝对不能直接在React前端代码中使用——前端代码会被编译后暴露在浏览器中,API_KEY和API_SECRET会被任何人获取,导致你的Mailjet账户被恶意滥用。

修复方案

步骤1:修正导入方式(仅适用于后端代码)

如果是在Node.js后端中使用,将导入代码改为命名导入:

import { Mailjet } from 'node-mailjet';

步骤2:迁移邮件逻辑到后端

正确的做法是将发送邮件的逻辑放在后端服务中,前端通过API接口调用后端来发送邮件。以下是示例实现:

后端示例(Node.js + Express)

// server.js
import express from 'express';
import { Mailjet } from 'node-mailjet';
const app = express();
app.use(express.json());

const API_KEY = '你的API_KEY';
const API_SECRET = '你的API_SECRET';
const mailjet = new Mailjet({ apiKey: API_KEY, apiSecret: API_SECRET });

app.post('/api/send-email', async (req, res) => {
  try {
    const request = mailjet.post('send', { version: 'v3.1' }).request({
      Messages: [
        {
          From: { Email: 'john@doe.com', Name: 'Mailjet Pilot' },
          To: [{ Email: req.body.toEmail, Name: req.body.toName }],
          Subject: 'Your email flight plan!',
          HTMLPart: '<h3>Dear passenger, welcome to Mailjet!</h3><br />May the delivery force be with you!'
        }
      ]
    });
    const response = await request;
    res.status(200).json({ success: true, data: response.body });
  } catch (error) {
    res.status(500).json({ success: false, error: error.message });
  }
});

app.listen(3001, () => console.log('后端服务运行在3001端口'));

前端React调用示例

// React组件中
const sendEmail = async () => {
  try {
    const response = await fetch('http://localhost:3001/api/send-email', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ toEmail: 'johndoe@gmail.com', toName: 'passenger 1' })
    });
    const data = await response.json();
    console.log('邮件发送结果', data);
  } catch (error) {
    console.log('发送失败', error.message);
  }
};

内容的提问来源于stack exchange,提问作者Ali Asger Ratlamwala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:00:04