在 Nodejs 的另一种方法中的一种方法中使用来自函数的响应

Using response from a function in one method in another method in Nodejs

我有这个 returns 和 URL 的功能,我想在另一种方法中使用相同的 URL。我该怎么做?

代码如下:

router.post('/', async (req, res) => {
    let imageUrl

    try {
        if (req.body.base64URL) imageUrl = await uploader(req.body.base64URL)
        else if (req.body.url) imageUrl = req.body.url
        else {
            res.redirect('/create')
            return
        }

        res.render('create', { image: imageUrl })
    } catch (error) {
        console.log(error, 'error')
    }
})

router.post('/details', async (req, res) => {
    try {
        const data = await creator(req.body, /* use imageUrl here */)
    } catch (error) {
        console.log(error, 'error')
    }
})

如您所见,我在一个方法中获取了 ImageUrl 的值,我想在另一个方法中使用相同的值。请帮我解决一下。

我可以建议 3 个选项:

/details 请求中发送 imageUrl

您的客户似乎已经拥有 URL,因为您 return 它在 / 的资源中。如果这些路由在逻辑上是分开的,那么再发送一次就有意义了。

缓存class/object

使用服务器内存存储 imageUrls。创建一个单例对象作为缓存字典。您必须在 / 路由中添加一些唯一 ID,return 将其发送到客户端并将相同的 ID 发送到 /details。 缺点是如果服务器 crashes/restarts,你会丢失内存中的图像。

保存到数据库

将上传图片的 imageUrls 存储在数据库中,return 客户端的唯一 ID。这类似于缓存,除了持久性并且需要您将数据库添加到设计中。我假设“创建者”函数将请求信息存储在数据库中?


我也在质疑是否需要两条路线,似乎 //details 可以合并为一条路线。它们分开有什么特别的原因吗?

因此,正如指出的那样,这也是我最初的想法,因为我在 / POST 路由中将 imageUrl 发送给客户端,建议发回 imageUrl 当客户端点击 /details POST 路由时。

我实现这一点的方法是,我创建了另一个 input 元素,并将显示设置为 none,然后在该输入中添加了 imageUrl 的值。

这是最容易实施的解决方案,无需在后端将 imageUrl 设为全局。正如@EcksDy 提到的,还有其他实现方法。