var express = require('express'); var createError = require('http-errors') var router = express.Router(); const ejs = require('ejs'); const utils = require('../../libs/utils'); const models = require('../../models'); // 提交email信息 router.post('/', async (req, res) => { try { const { email } = req.body; // 验证邮箱格式 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { return res.status(400).json({ message: 'Invalid email address' }); } // 检查邮箱是否已存在 const existingSubscriber = await models.Subscribe.findOne({ email }); if (existingSubscriber) { // 发送欢迎邮件 let html = await renderFile(__dirname + '/subscribe.ejs', {}); await utils.mail.send({ to: email, subject: 'Welcome to Art Number Coloring!', html, }) return res.status(400).json({ message: 'Email already subscribed' }); } // 创建新订阅者 const subscribe = new models.Subscribe({ email }); await subscribe.save(); // 发送欢迎邮件 let html = await renderFile(__dirname + '/subscribe.ejs', {}); await utils.mail.send({ to: email, subject: 'Welcome to Art Number Coloring!', html, }) res.status(200).json({ message: 'Subscription successful' }); } catch (error) { console.error('Error subscribing:', error); res.status(500).json({ message: 'Server error' }); } }); async function renderFile(filename, data, options) { return new Promise((done, reject) => { ejs.renderFile(filename, data, options, function (err, str) { if (err) reject(err); else done(str); }); }) } module.exports = router;