作为练习,我只是创建了一个静态投资组合引导网站,该网站底部有一个“与我联系”部分,您可以在其中输入您的姓名,电话号码,电子邮件和一些文本。这个网站最初是作为一个静态网站创建的,但是在我观看了几个有关如何使用node.js发送电子邮件的youtube视频之后,我在一个单独的项目中对其进行了测试,并且代码可以正常工作。因此,我决定将此功能添加到此静态网站中,但是我做到了,但是我学到的代码不再起作用。我对node.js还是很陌生,现在我认为整个想法首先可能是错误的,因为我可能需要设置不同的文件夹结构/或环境,至少要从一开始就着手这项工作,而不仅仅是简单地在上面加上一些东西是正确的。 我提供了文件夹结构和app.js文件的图像。 app.js已放置在公用文件夹目录中(根据我的研究发现),并且还添加了指向html文件的链接,供html页面访问JavaScript文件。但是,一旦将app.js放置在公用文件夹中,当我运行node.js app.js时,我总是会出错。看来它不再起作用了。 此外,您在下面看到的代码来自youtube video,我遵循的是联系表单是它唯一呈现的内容,但是,就我而言,联系表单是html文件的一部分,我该如何呈现如果联系表单是html文件的一部分,则为表单。谁能帮我吗?
const express = require('express');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const path = require('path');
const nodemailer = require('nodemailer');
const app = express();
// View engine setup
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');
// Static folder
app.use('/public', express.static(path.join(__dirname, 'public')));
// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.get('/', (req, res) => {
res.render('contact');
});
app.post('/send', (req, res) => {
const output = `
<p>You have a new contact request</p>
<h3>Contact Details</h3>
<ul>
<li>Name: ${req.body.name}</li>
<li>Email: ${req.body.email}</li>
<li>Phone: ${req.body.phone}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'jasonking4ever@gmail.com', // generated ethereal user
pass: 'senyang123' // generated ethereal password
},
tls: {
rejectUnauthorized: false
}
});
// setup email data with unicode symbols
let mailOptions = {
from: '"Contact Form" <jasonking4ever@gmail.com>', // sender address
to: 'syan19@live.cn', // list of receivers
subject: 'You have a new contact request', // Subject line
text: 'Hello world?', // plain text body
html: output // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
res.render('contact', { msg: 'Email has been sent' });
});
})
app.listen('3000', () => console.log('the server is starting...'))
答案 0 :(得分:1)
嘿,我的服务器文件在根目录中(我的意思是在您的文件夹根目录中)是我必须看到的app.js文件夹,而不是公共文件夹,公共文件夹用于提供公共文件(请说与UI相关的文件。)。因此,从此处删除app.js,并将其放在文件夹根目录中并运行node。希望有帮助。