如何解决如何从HTML调用节点函数
我正在使用NodeJS发送电子邮件。这是我的emailer.js文件:
function email_sender() {
console.log("sending email")
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
host: 'smtp.company.com',port: 25,domain: '*.company.com',secure: false
});
var mailOptions = {
from: 'abc@company.com',to: 'abc@company.com',subject: 'Sending Email',html: '<h1>Welcome</h1><p>That was easy!</p>'
};
transporter.sendMail(mailOptions,function (error,info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
email_sender()
当我在终端中使用“ node emailer.js”时,此方法工作正常。但是,我有一个仅用HTML,JQuery js制作的网页。在该HTML中,我有一个用于发送电子邮件的按钮:
<button type="button" class="btn btn-primary" onclick="email_sender()">Send Email</button>
如何直接从HTML调用nodeJS函数?我过去从未使用过Node JS,因此无法使用JavaScript电子邮件发件人(smtp.js)函数,因为它无法使用它。
解决方法
您将需要创建一个HTTP服务器。这是一个简化的示例。
让我给您看一个例子,我可以解释一些基本知识:
index.js:
const express = require('express');
const app = express();
const port = 8080;
// Parse URL-encoded bodies when sent by HTML forms
app.use(express.urlencoded());
// Parse JSON bodies when sent by clients
app.use(express.json());
// Return page with form
app.get('/',(req,res) => {
res.sendFile('absolutePathToYour/htmlPage.html');
});
// Process form submit
app.post('/submit',res) => {
console.log(req.body.user.name);
console.log(req.body.user.email);
function_that_do_something(req.body.user.name,req.body.user.email);
});
app.listen(port,() => {
console.log(`Example app listening at http://localhost:${port}`)
});
htmlPage.html中的HTML表单:
<form method="post" action="/submit">
<input type="text" name="user[name]">
<input type="text" name="user[email]">
<input type="submit" value="Submit">
</form>
该服务器将监听端口8080。在本地运行时,可以使用http://localhost:8080
来运行它。
当用户转到您的网站/
的根目录时,您的服务器将返回其中包含表单的html页面。
然后,当您的表单调用URL /submit
并发送信息时,您将读取信息请求的正文并将其发送给函数。
需要考虑的几件事。
-
您应该验证从表单接收到的输入,以防止受到攻击。
-
您应该引入一个验证码,以防止机器人滥用您的系统。
-
express
之外的其他软件包可能更便于您使用。 -
有许多针对nodejs的验证和验证码软件包。找到最常用的一个。
-
记住要在
中添加项目使用的软件包package.json
问题是您无法在正常的html网站中通过npm安装和使用软件包。解决方案是检查“ nodemailer” CDN是否存在,并在html文件的脚本标记中使用它,以便该nodemailer的功能在全球范围内可用。或者,您也可以下载nodemailer.js(nodemailer.min.js)文件(如果存在)并在您的项目文件夹中使用,然后通过html文件中的脚本标签将其导入
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。