范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

让我们用Next。js构建一个联系表单

  大多数网站都有一个联系页面,您可以在其中发送消息以联系所有者。 它们看起来像这样:
  在本文中,我们将在 Next.js 中使用 React 创建一个类似的表单。 首先,我将创建一个带有表单的前端部分,然后我将构建一个 API 路由,将表单发送到您的电子邮件。
  设置应用程序
  首先,让我们创建一个新的 Next.js 项目。 我们将在启用 JavaScript 和 ESLint 的 contact-form 文件夹中创建它:npx create-next-app contact-form --js --eslint
  这将创建文件夹并安装所有依赖项。
  现在进入文件夹(cd contact-form)并启动开发服务器:npm run dev
  访问 http://localhost:3000 查看正在运行的应用程序。
  创建表单
  我们要进行更改的主要文件是 pages/index.js。 删除文件中的原始代码并粘贴以下代码:import React from "react";  export default function Home() {   return (        ); }
  此代码创建一个包含以下字段的表单:
  电子邮件
  名
  姓
  电话号码
  信息
  除消息外,所有字段都是必需的。
  要向表单添加样式,请将 styles/globals.css 文件的内容替换为以下代码:html, body {   padding: 0;   margin: 0;   font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu,     Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;   background: #1e1e1e;   min-height: 100vh;   display: flex;   color: rgb(243, 241, 239);   justify-content: center;   align-items: center; }  .block {   display: flex;   flex-direction: column; }  .name {   display: flex;   flex-direction: row;   justify-content: space-between; }  .container {   font-size: 1.3rem;   border-radius: 10px;   width: 85%;   padding: 50px;   box-shadow: 0 54px 55px rgb(78 78 78 / 25%), 0 -12px 30px rgb(78 78 78 / 25%),     0 4px 6px rgb(78 78 78 / 25%), 0 12px 13px rgb(78 78 78 / 25%),     0 -3px 5px rgb(78 78 78 / 25%); }  .container input {   font-size: 1.2rem;   margin: 10px 0 10px 0px;   border-color: rgb(31, 28, 28);   padding: 10px;   border-radius: 5px;   background-color: #e8f0fe; }  .container textarea {   margin: 10px 0 10px 0px;   padding: 5px;   border-color: rgb(31, 28, 28);   border-radius: 5px;   background-color: #e8f0fe;   font-size: 20px; }  .container h1 {   text-align: center;   font-weight: 600; }  .name p {   display: flex;   flex-direction: column; }  .block button {   padding: 10px;   font-size: 20px;   width: 30%;   border: 3px solid black;   border-radius: 5px; }  .button {   display: flex;   align-items: center; }  textarea {   resize: none; }
  我们的表单应该看起来像这样:
  现在我们需要找到一种方法来存储用户输入的输入。 我将使用当前所有浏览器都原生支持的 FormData。 它从表单加载字段,然后将它们提交给服务器。
  在 pages/index.js 文件中,粘贴以下代码(注意新的 handleSubmit 函数):import React from "react";  export default function Home() {   async function handleSubmit(e) {     e.preventDefault();     const data = new FormData(e.currentTarget);     console.log(data);   }    return (        ); }
  现在,当您尝试提交表单时,您应该会在开发人员控制台中看到 FormData。
  向 API 提交表单
  我们将使用 [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) 将表单数据提交给 API——不需要额外的依赖。
  表单提交逻辑转到 handleSubmit 函数。 以下是 pages/index.js 中的完整代码:import React from "react";  export default function Home() {   async function handleSubmit(e) {     e.preventDefault();     const data = new FormData(e.currentTarget);     try {       const response = await fetch("/api/contact", {         method: "post",         body: new URLSearchParams(data),       });       if (!response.ok) {         throw new Error(`Invalid response: ${response.status}`);       }       alert("Thanks for contacting us, we will get back to you soon!");     } catch (err) {       console.error(err);       alert("We can"t submit the form, try again later?");     }   }    return (        ); }
  handleSubmit 将 POST 请求中的数据发送到 /api/contact 路由。 我们还将 FormData 对象包装在 URLSearchParams 中,以将数据作为 application/x-www-form-urlencoded 发送,该数据由 Next.js API 路由处理程序自动解码。
  在 API 路由中处理表单提交
  现在我们需要处理服务器上的表单提交。 我们将为此使用 Next.js API 路由。 API 路由位于 pages/api 文件夹中。 让我们创建对应于 API 路由 /api/contact 的 pages/api/contact.js 文件。
  首先在 pages/api/contact.js 文件中粘贴以下代码来测试我们是否在服务器上接收到数据。export default function handler(req, res) {   console.log(req.body);   res.send(200); }
  现在尝试提交表单,您应该会看到终端上记录的数据。 现在我们进入了有趣的部分。
  使用 SendGrid 和 Superface 发送电子邮件
  当用户提交联系表时,我们希望将提交的信息发送给网站所有者。 首先,我们需要选择一些电子邮件提供商并研究他们的 API 和 SDK。 或者我们可以将 Superface 与任何提供商一起使用。
  Superface 使 API 集成变得超级简单。 我们不必处理 API 文档,我可以在同一接口后面使用许多提供程序。 此外,我可以使用 Superface 目录中更多现成的 API 用例。 这是一个值得在您的工具箱中拥有的工具。
  设置发送网格
  我将使用 SendGrid 作为 Superface 的电子邮件提供商。 创建您的帐户,获取具有完全访问权限的 API 密钥并验证单一发件人验证。
  在 Superface 端,选择用例,即:发送电子邮件。
  从 API 路由发送电子邮件
  Superface 用例与 OneSDK 一起使用,因此我们必须安装它。npm i @superfaceai/one-sdk
  在发送电子邮件用例的 Superface 上,选择 sendgrid 作为提供者。 我们可以在 API 路由处理程序中使用示例中的大部分代码,我们只需要从请求中正确传递数据即可。
  将以下代码粘贴到您的 pages/api/contact.js 文件中:const { SuperfaceClient } = require("@superfaceai/one-sdk");  const sdk = new SuperfaceClient();  //只需检查是否提供了所有必填字段 function formValid(body) {   return body.email && body.phone && body.first && body.last; }  export default async function handler(req, res) {   const body = req.body;    if (!formValid(body)) {     res.status(422).end();     return;   }    const profile = await sdk.getProfile("communication/send-email@2.1.0");   const message = `     Email: ${body.email}     Phone: ${body.phone}     Name: ${body.first} ${body.last}     Message: ${body.message}      `;   const result = await profile.getUseCase("SendEmail").perform(     {       from: process.env.FROM_EMAIL,       to: process.env.TO_EMAIL,       subject: "Message from contact form",       text: message,     },     {       provider: "sendgrid",       security: {         bearer_token: {           token: process.env.SENDGRID_API_KEY,         },       },     }   );    try {     const data = result.unwrap();     console.log(data);     res.status(201).end();   } catch (error) {     console.error(error);     res.status(500).end();   } }
  您会注意到我们在代码中引用了一些环境变量(例如 process.env.SENDGRID_TOKEN)。 我们可以将这些存储在 .env 文件中。 在项目的根目录中,创建一个包含以下内容的 .env.local 文件(确保编辑值):# 在单一发件人验证中验证的电子邮件地址 FROM_EMAIL=from@example.com # 您要将提交内容发送到的电子邮件地址 TO_EMAIL=to@example.com # Sendgrid API key SENDGRID_API_KEY=SG.abcdef...
  我们的应用程序已准备就绪。 使用 npm run dev 运行(或重启)开发服务器并尝试提交表单!
  结论
  我们已经学习了如何在 Next.js 中创建表单,使用 FormData 提交表单并获取,在 API 路由中处理提交并通过电子邮件发送。
  进一步可能的改进包括添加 CAPTCHA 或蜜罐字段以防止垃圾邮件提交,通过检查电话和电子邮件地址改进表单数据验证,将提交格式化为 HTML,或在提交时向用户提供更好的反馈。
  除了发送电子邮件,我们还可以通过提交做更多的事情,比如将数据发送到 CRM 或 Slack,或者处理时事通讯订阅。 但那是另一次——关注我们的个人资料或注册我们的每月时事通讯,这样您就不会错过我们以后的教程。

关于日本乒乓球队的天才少女平野美宇,你了解吗?她是一个漂亮可爱小姑娘,若不是在2017年亚锦赛连续战胜我女乒丁宁朱雨玲陈梦三大主力,拿下亚锦赛冠军,震惊乒坛,恐怕不会对她有更多的了解。她是一个尊师懂事儿的小姑娘。年芳18岁的小如何看待伊藤美诚世乒赛被王艺迪淘汰出局?你想对伊藤说点什么?王艺迪在世乒赛14比赛中,淘汰伊藤美辰,以王艺迪的实力这是意料之中的事,不足为奇。伊藤是特长型运动员,前三板非常厉害,前三板斧被化解,后面的相持能力就不行了。就实力而言,她还不如队红蓝大战一触即发,联赛领头羊切尔西能否打破七场不胜红魔的尴尬?北京时间11月29日凌晨030分,英超联赛将上演一场万众瞩目的焦点大战。目前在联赛中高居榜首的蓝军切尔西队,将在主场迎战老对手红魔曼联。作为上赛季的欧冠冠军(足总杯亚军英超第4名)日本女乒在休斯敦世乒赛全军覆没,现在伊藤美诚是否心服口服?感谢邀请!日本女乒在休斯顿世乒赛,没有想象中的那么强大。伊藤美诚早田希娜都是败于王艺迪拍下,老将石川佳纯也被陈梦40横扫,那出局之后的伊藤美诚是否会心服口服呢?日本女队为何出现全军换手机屏,原装屏幕和普通屏幕有什么区别?手机屏幕换原装的好还是普通屏幕好,做为一个手机维修从业人员,说一下自己的一些看法现在市面上的手机大部分采用LCD和OLED屏幕。LCD又有原装屏幕后压屏(原装内屏用压屏机压上外屏)你见过最搞笑的图片是什么?尊敬的楼主小老弟你好,手机里正好还有几张图片,发给你看看,如果你看完不点赞,那你就看看我头像就知道我是干嘛的了,话不多说,直接上图!对于俺们这种不喜欢吃葱的,一粒都不能看到,必须都女生穿白衬衫街拍,有哪些时尚搭配?白衬衫让人觉得很性感,长衬衫让人觉得奇怪,有一个女人跟男朋友住在一起,偶然一个女人穿的是男人的衬衫,男人身材高大,衬衣大号,所以女人穿后非常宽松。所以,女性的魅力是完全显露出来的,个人征信不好,能否用房产证作为抵押贷款?个人征信与贷款密切相关,但并不是说征信不好就贷不到,有房产抵押还是可以贷到的,但成本可能比其他人要高。按照有无担保物来划分贷款可以大致分为两类一类是有担保物的贷款,常见的就是动产质以后自行车还能兴起吗?自行车必将大兴于世,特别是特大城市和部分以旅游业为支柱产业的中小城市。首先,低碳经济是时代发展潮流,碳中和,碳达峰是国家的政策方向。而实现这一目标,其中一个很有效的方法就是鼓励老百耳聋戴助听器有用吗?你好,有听损但不是全聋,戴助听器一般都是能起到一定的作用的。具体效果如何,需要患者亲自到助听器验配机构检查试听。如果有残余听力是可以佩戴助听器的,具体效果跟个人听损情况有关,建议到产妇下奶的方法有哪些?产妇下奶的方法有哪些?产妇下奶的方法有坚持母乳喂养保证喂养姿势正确避免吸烟及饮酒多喝水谨慎使用药物保证充足的睡眠饮食营养均衡吃有催乳作用的食物等,都可以促进乳汁分泌。1。坚持母乳喂
开学了,早餐要吃好,这7种快手营养做法,轮流做给孩子吃开学了,就是新的开始,虽然立春了,可是天气还是很冷,记得让孩子吃好早餐再出门。这样出门不怕冷。分享7款适合孩子吃的早餐,做法不难简单快手,换可以换着做给孩子吃,开启能量满满的新一天为什么鱼一定要长刺?鱼刺会扎到鱼自己吗?鱼,因为谐音年年有余富贵有余,是过年时餐桌上的常客。红烧清蒸烧烤火锅一条鱼多少种吃法,真是说也说不完。不过,鱼好吃,刺却危险,特别是藏在鱼肉间的小刺,怎么挑也挑不干净,让人吃得心惊义乌65岁老板喝酒30年,总结3大宝贵经验,白酒也能越喝越年轻对于很多国人来说白酒就是精神食粮,不少老酒鬼都是,饭不一定吃的多好,但是每天不能少了那一口好酒。小编也是喜欢喝酒的人,但是年龄增长也让我觉得有些担心,毕竟也看过不少喝酒把身体喝垮了都是尖庄酒,老尖庄和绵柔有区别吗?行家有,弄懂再买不吃亏作为天府之国的四川,一直就是白酒的温柔乡,身处的地理位置就非常适合酿酒,占据了天时地利人和,所以孕育出了川酒的六朵金花,而且还有白酒界中举足轻重的两大巨头都是出自这里。那就是五粮液抢人!抢铺!2023年,将是餐饮业厮杀最狠的一年2月财经新势力餐饮市场复苏明显,大批餐饮品牌和创业者正磨刀霍霍抢人抢地抢资源。基于此,不少业内人士预测,2023年将成为餐饮业拼杀最狠的一年!本文由红餐网(IDhongcan18)复苏回暖,金山餐饮市场重新焕发活力!随着疫情形势日趋平稳,金山区餐饮行业正在回暖复苏,近日,金山区各商圈景区餐饮店铺又恢复了往日的热闹场景。在金山嘴渔村的天桥饭店内,大厅里已经坐了几桌顾客,时不时还有不少游客前来就餐郴州北湖元素再出圈郴心郴意文创产品亮相郎朗担任郴州文化旅游国际公益形象大使新闻发布会来源人民网湖南频道郴州北湖区郴心郴意文创产品吸引市民欣赏。人民网记者李芳森摄郴州北湖区郴心郴意文创产品。人民网记者李芳森摄人民网长沙2月10日电当湖南郴州北湖区郴心郴意文创产品遇到宠臣宇文化及白天刚杀了隋炀帝杨广,晚上就钻进了萧皇后的寝宫公元591年,后梁的王宫喜气洋洋,隋文帝杨坚派使者在梁王萧岿的几个女儿中给二儿子杨广选一王妃。对萧岿而言,只要与隋文帝结亲,他在后梁的地位便无人能撼动。然而,没想到的是,隋朝的相师南京文化地理两江总督周馥与常府街寓所周馥(18371921),安徽东至人,李鸿章幕府的重要成员,洋务运动后期实际操盘手,官至两江两广总督。早年追随李鸿章征战和办理洋务,辗转苏州南京扬州北京保定天津等地,每到一处落脚,光明路街道带加拿大国际友人RichardHayford一起感受中华传统节日元宵节的文化魅力视频加载中2月1日下午,元宵佳节乐享民俗活动在市中区光明路街道东盛社区举行OntheafternoonofFebruary1,EnjoyFolkCustomLanternFesti互联网人找工作现状往年精挑细选,如今能捡就捡往年,互联网人找工作的标准那可比找对象要严谨得多。至少通勤要在1个半小时之内,最好还能是地铁公交直达公司氛围一定得好,最好每周都有下午茶最重要的是,薪资至少要上调20,这跳槽才算是