Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >可以在静态网站上使用nodejs来提交表单吗?

可以在静态网站上使用nodejs来提交表单吗?
EN

Stack Overflow用户
提问于 2020-01-24 01:13:48
回答 3查看 264关注 0票数 0

我有这个网站,现在有一个主页和一个联系页面。页面导航是通过HTML和href链接完成的。

我还用node.js制作了一个服务器来处理联系人页面上的表单提交。它正在使用快递,nodemailer,nodemailer-mailgun transport。

我已经能够让表单提交工作,运行节点server.js命令,并转到我的计算机上的本地主机。它会提交并发送到我的邮箱。

我遇到的问题是,当我只是导航到我的联系人页面,而不是使用node命令来运行服务器时,我如何才能让它工作呢?

任何事都会有帮助。

EN

回答 3

Stack Overflow用户

发布于 2020-01-24 20:02:06

有几种方法可以做到这一点……

NodeJs应用程序中有一个静态

页面,您想要处理表单提交

有两种聪明的方法可以实现这个想法。

1.托管NodeJs应用程序

通过使用express.static(),例如:

server.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.processForm = formData => {
    // process form...
    return { message: 'Email sent', error: null };
};

在这个特定的示例中,您应该有一个名为public的目录,其中有一个包含您的表单的index.html文件,在该表单中,在提交表单时,您可能会得到如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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端点来运行该函数,您只需在表单中添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form action="https://your.endpoint.com/abcd123" ... >...</form>

Google CloudAzure FunctionsAWS Lambda都可以帮助你做到这一点

票数 2
EN

Stack Overflow用户

发布于 2020-01-24 01:25:06

不是的。Node.js是服务器端软件:你不能把它嵌入到静态网页中。

票数 1
EN

Stack Overflow用户

发布于 2020-01-24 03:10:12

如果您的意思是“在静态网站上使用”是指在前端运行代码,那么您不能这样做。您可以做的是,如果您在其他地方托管了一台node.js服务器,您可以通过请求将表单数据发送到此服务器。

如果您希望node.js服务器仅用于处理表单提交,那么考虑使用云函数可能是一个好主意。

你可能会对medium上的this教程感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59889206

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文