subscribe.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var express = require('express');
  2. var createError = require('http-errors')
  3. var router = express.Router();
  4. const ejs = require('ejs');
  5. const utils = require('../../libs/utils');
  6. const models = require('../../models');
  7. // 提交email信息
  8. router.post('/', async (req, res) => {
  9. try {
  10. const { email } = req.body;
  11. // 验证邮箱格式
  12. const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  13. if (!emailRegex.test(email)) {
  14. return res.status(400).json({ message: 'Invalid email address' });
  15. }
  16. // 检查邮箱是否已存在
  17. const existingSubscriber = await models.Subscribe.findOne({ email });
  18. if (existingSubscriber) {
  19. // 发送欢迎邮件
  20. let html = await renderFile(__dirname + '/subscribe.ejs', {});
  21. await utils.mail.send({
  22. to: email,
  23. subject: 'Welcome to Art Number Coloring!',
  24. html,
  25. })
  26. return res.status(400).json({ message: 'Email already subscribed' });
  27. }
  28. // 创建新订阅者
  29. const subscribe = new models.Subscribe({ email });
  30. await subscribe.save();
  31. // 发送欢迎邮件
  32. let html = await renderFile(__dirname + '/subscribe.ejs', {});
  33. await utils.mail.send({
  34. to: email,
  35. subject: 'Welcome to Art Number Coloring!',
  36. html,
  37. })
  38. res.status(200).json({ message: 'Subscription successful' });
  39. } catch (error) {
  40. console.error('Error subscribing:', error);
  41. res.status(500).json({ message: 'Server error' });
  42. }
  43. });
  44. async function renderFile(filename, data, options) {
  45. return new Promise((done, reject) => {
  46. ejs.renderFile(filename, data, options, function (err, str) {
  47. if (err) reject(err);
  48. else done(str);
  49. });
  50. })
  51. }
  52. module.exports = router;