HTML上的POST请求



所以我试着制作一个URL收缩器来取乐,并使用了Traversy Media教程

以下是他的项目的GitHub:https://github.com/bradtraversy/url_shortener_service

为了使它成为一个完整的网站,我必须制作一个UI。。。

但是我被通过ejs生成的POST请求卡住了。

我目前已经在我的index.ejs:中写下了这段代码

<body>
<header class="header">
<h1>Shrinker</h1>
</header>
<div class='main'>
<form action="http://localhost:5000/api/url/shorten" method="POST" class="content">
<h2 class="shortenheader">Url Shortener</h2>
<div class="input-group">
<input  type="shortUrl"  class='neumorph-input' placeholder='Your Link' />
<input type="submit" class='neumorph-btn'>
</div>
</form>
</div>
</body>

但它总是给我一个错误"无效的长url",它来自routes/ul.js.中文件的代码结构

在教程中,他使用了一个内容类型为application/json的简单POST请求。效果很好。我使用的是mongodbatlas,所以数据库的云版本。

POST http://localhost:5000/api/url/shorten
Content-Type: application/json
{
"longUrl": "https://www.stackoverflow.com"
}

我想我必须在我的index.ejs中使用这种类型,但我不知道如何做到这一点。有人能帮忙吗?

好吧,HTML表单是以url编码的字符串(就像GET查询字符串一样(或表单数据(可以包含附件(的形式发送的,而不是JSON。看见https://www.w3.org/TR/html401/interact/forms.html#adef-enctype

为了实现这一点,你必须发出一个AJAX请求,在这个请求中你可以发送你想要的任何数据。

要形成请求主体,您可以序列化表单,然后将其转换为JSON。或者,最简单的方法是,由于只有一个属性,您可以手动构建主体:var data=JSON.stringify({longUrl:$("#shortUrl").val()});

此外,您还有一个错误。type="shortUrl"无效。它应该是type="text"name="shortUrl",或者id="shortUrl"才能与$("#shortUrl")一起选择。

如果您从未做过,那么最简单的方法就是使用jQuery。看见https://api.jquery.com/jquery.ajax/