微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

REST Post API - 从 TinyURL 方法检索结果

如何解决REST Post API - 从 TinyURL 方法检索结果

我未能在 POST 方法中从 TinyURL 获得结果并将其分配给“short_url”以进行响应。 console.log(short_url) 将显示“Promise { pending }”。我尝试使用 async/await 函数来检索 TinyURL 结果,但我确定我没有正确使用它。

var express = require('express')
var TinyURL = require('tinyurl')

var app = express()
app.use(express.json())
app.use(express.static('public'))

app.get("/",function (req,res) {
  res.sendFile(__dirname + '/index.html')
})

app.post('/api/shorturl',(req,res) => {

  let original_url = req.body.url
  console.log(original_url) // this one shows correct URL from request body

  async function createShortURL(url) {
    await TinyURL.shorten(url,function(res) {
    console.log(res) // this one shows correct shortened URL
  }
  )}

  let short_url = createShortURL(original_url)
  console.log(short_url) // this one shows "Promise { <pending> }"

  res.json({
    original_url : original_url,short_url : short_url
  })

})

var listener = app.listen(process.env.PORT || 3000,function () {
  console.log('Your app is listening on port ' + listener.address().port)
})

解决方法

你混合了异步/等待和回调。不要那样做。 tinyurl library 提供了 shorten 方法的 Promise 版本。我们可以直接使用 async/await。

app.post('/api/shorturl',async (req,res) => {

  let original_url = req.body.url
  console.log(original_url) // this one shows correct URL from request body

  // just this
  let short_url = await TinyURL.shorten(url);
  console.log(short_url)

  res.json({
    original_url : original_url,short_url : short_url
  })

})

编辑 如果您使用回调,请注意 callback hell。这是人们更喜欢 async/await 的主要原因之一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。