You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express POST接口调用TinyURL生成短链返回Promise pending问题求助

错误用法说明
  • 你给TinyURL.shorten传了回调函数,这种调用方式下该方法不会返回Promise,await关键字对其不生效,你封装的createShortURL async函数也没有返回短链结果,执行后只会返回pending状态的Promise。
  • 调用createShortURL时没有加await关键字,直接赋值拿到的是Promise实例,而非异步执行后得到的短链值。
  • res.json执行时机早于短链生成的异步逻辑,返回的short_url自然是未完成的Promise对象。
正确实现方案

完整可运行代码

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')
})

// 路由处理函数添加async关键字,支持内部使用await
app.post('/api/shorturl', async (req, res) => {
  try {
    const original_url = req.body.url
    console.log('原始URL:', original_url)

    // 不传回调调用TinyURL.shorten会返回Promise,await直接获取短链结果
    const short_url = await TinyURL.shorten(original_url)
    console.log('生成短链:', short_url)

    res.json({
      original_url,
      short_url
    })
  } catch (error) {
    // 捕获异常返回错误响应
    res.status(500).json({
      error: '短链生成失败,请检查输入URL合法性'
    })
  }
})

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

改动说明

  • 给POST接口的路由处理函数添加async关键字,使其支持await语法
  • 去掉冗余的自定义封装函数,直接调用TinyURL.shorten且不传回调,利用其原生支持的Promise返回特性,用await直接拿到短链结果
  • 新增try/catch捕获异步操作异常,避免服务崩溃,异常时返回明确的错误响应
  • 调整响应执行时机,等短链生成完成后再返回响应数据

内容的提问来源于stack exchange,提问作者trily84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 11:06:08