首页 > 解决方案 > 我如何使用节点 js 创建具有到期日期的 tinyURL

问题描述

我正在生成 tinyUrl 并通过邮件和短信发送给客户,我想从 nodejs 代码生成 tinyURL,这样如果用户在特定日期之后访问此 URL,那么它应该会过期。我可以从下面的代码成功生成 tinyurl,但我想生成带有到期日期的链接,这样一旦用户在特定日期之后点击,链接就会自动到期。

解决这个问题的任何方法,或者是另一种选择。

const tinyUrl = require('tinyurl')

const generateTinyUrl = function (mainUrl) {
  return new Promise((resolve, reject) => {
    tinyUrl.shorten(mainUrl).then((response) => {
      if (response !== 'error') {
        logger.info(util.format("Tiny URL Generated Properly."))
        resolve(response)
      } else {
        logger.error(util.format("Error while Generating the Tiny URL. Error: %j", response))
        reject(response)
      }
    }).catch((error) => {
      logger.error(util.format("Error while Generating the Tiny URL. Error: %j", error))
      reject(error)
    })
  })

标签: node.jstinyurl

解决方案


据我所知,您正在使用来自https://www.npmjs.com/package/tinyurltinyurl的npm 包,它利用来自 tinyurl.com 的 API 创建缩短的 url。这个包不支持过期链接,这意味着一旦你使用他们的服务创建了一个 url,它将永远在 tinyurl.com 上注册。

但是,您可以直接使用 tinyurl API,而忽略tinyurlnpm 包。Tinyurl 有很好的文档tinyurl .com /app /dev(添加空格,因为链接缩短器在 SO 上被列入黑名单),其中解释了您可以在 /update 处向 api 发送 PATCH 请求以更改链接的发送位置。

由于我看不到正在调用什么generateTinyUrl或如何使用响应,因此我不确定对于您的情况而言最好的前进路径是什么。但是,在我看来,你有两个选择。

  • 选项 1:我建议您学习如何使用外部 API 并tinyurl从代码中删除 npm 包。然后,您可以安排一个 cron 作业或类似的作业来扫描您的 url,检测哪些已过期,并向 /update 发送请求以将 url 更改为向用户解释其链接已过期的自定义页面。
  • 选项 2:当您生成 tinyURL 时,让它指向您控制的域。生成该页面,以便在访问该页面时,它会从您的数据库中收集相关数据,包括其到期日期。当达到到期日期时,该页面可能会显示您编写的自定义到期消息。

推荐阅读