所以我试着制作一个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/