我有这个网站,现在有一个主页和一个联系页面。页面导航是通过HTML和href链接完成的。
我还用node.js制作了一个服务器来处理联系人页面上的表单提交。它正在使用快递,nodemailer,nodemailer-mailgun transport。
我已经能够让表单提交工作,运行节点server.js命令,并转到我的计算机上的本地主机。它会提交并发送到我的邮箱。
我遇到的问题是,当我只是导航到我的联系人页面,而不是使用node命令来运行服务器时,我如何才能让它工作呢?
任何事都会有帮助。
发布于 2020-01-24 20:02:06
有几种方法可以做到这一点……
NodeJs应用程序中有一个静态
页面,您想要处理表单提交
有两种聪明的方法可以实现这个想法。
1.托管NodeJs应用程序
通过使用express.static()
,例如:
server.js
const express = require('express');
const bodyParser = require('body-parser');
const engine = require('./engine');
const app = express();
const PORT = process.env.PORT || 3001;
app.use('/', express.static('public'));
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/api', async (req, res) => {
res.json(await engine.processForm(req.body));
});
app.listen(PORT, () => {
console.log(`ready on http://localhost:${PORT}`);
});
和你的engine.js
exports.processForm = formData => {
// process form...
return { message: 'Email sent', error: null };
};
在这个特定的示例中,您应该有一个名为public
的目录,其中有一个包含您的表单的index.html
文件,在该表单中,在提交表单时,您可能会得到如下内容:
<script>
$( "#contactForm" ).submit(function( evt ) {
alert( "Handler for .submit() called." );
evt.preventDefault();
$.post( "/api", $(this).serialize(), function( data ) {
$( ".result" ).html( data.response );
});
});
</script>
您需要将整个项目托管在一个可以处理NodeJs应用程序的托管环境中,比如Heroku。
2.使用云函数,如Google Cloud或AWS Lambda
在这里,您将NodeJs应用程序编写为一个函数,您将有一个HTTP端点来运行该函数,您只需在表单中添加
<form action="https://your.endpoint.com/abcd123" ... >...</form>
Google Cloud、Azure Functions或AWS Lambda都可以帮助你做到这一点
发布于 2020-01-24 01:25:06
不是的。Node.js是服务器端软件:你不能把它嵌入到静态网页中。
发布于 2020-01-24 03:10:12
如果您的意思是“在静态网站上使用”是指在前端运行代码,那么您不能这样做。您可以做的是,如果您在其他地方托管了一台node.js服务器,您可以通过请求将表单数据发送到此服务器。
如果您希望node.js服务器仅用于处理表单提交,那么考虑使用云函数可能是一个好主意。
你可能会对medium上的this教程感兴趣。
https://stackoverflow.com/questions/59889206
复制相似问题