【问题标题】:Can nodejs be use on a static website for form submission?可以在静态网站上使用 nodejs 进行表单提交吗?
【发布时间】:2023-04-05 18:18:01
【问题描述】:

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

我还用 node.js 制作了一个服务器来处理联系页面上的表单提交。它为此使用 express、nodemailer、nodemailer-mailgun-transport。

我已经能够让表单提交工作,运行 node server.js 命令并转到我计算机上的 localhost。它提交并发送到我的电子邮件就好了。

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

任何事情都会有帮助。

【问题讨论】:

  • 取决于您的主机,您可以托管 nodeJs 应用程序吗?如果是,那么这很容易,因为您可以简单地使用express 加载当前的静态文件,但是运行一个服务器,您可以在其中处理提交...首先,告诉我们您是否可以在您的当前主机。
  • 好吧,现在我所做的只是在本地主机上工作。托管我正在考虑与 GoDaddy 一起去。我一直在使用 express 来整理那个网页,并且我能够让它以这种方式工作。但我想运行 HTML 静态文件,然后单击提交以调用后端并以这种方式运行。
  • 让我推荐你Heroku,如果你对 Git 没问题,这是一个很棒的免费托管(如果 30 分钟内没有活动,服务器会休眠,但很快就会出现)......和这对于小型项目来说太棒了。这样您就可以托管您的页面并在同一个地方有一个节点作为服务器

标签: html node.js express nodemailer


【解决方案1】:

没有。 Node.js 是服务器端软件:您不能将其嵌入到静态网页中。

【讨论】:

    【解决方案2】:

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

    如果您想要一个仅用于处理表单提交的 node.js 服务器,考虑使用 Cloud Functions 可能是个好主意。

    您可能感兴趣的媒体上有this 教程。

    【讨论】:

      【解决方案3】:

      有几种方法可以解决这个问题...

      你有一个静态 HTML 页面,你想在 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 CloudAzure FunctionsAWS Lambda 都可以为您提供帮助

      【讨论】:

      • 谢谢,我会看看我能做什么!感谢您的指导。
      猜你喜欢
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 2016-08-12
      相关资源
      最近更新 更多