gpt4 book ai didi

node.js - Next.js:如何在服务器端持久化数据以从页面调用访问它

转载 作者:行者123 更新时间:2023-12-04 03:53:10 25 4
gpt4 key购买 nike

我有一个带有自定义服务器 (Express) 的 Next.js 应用程序,只要服务器处于事件状态,它就会连续执行一些操作并在内存中保留一些数据。

我想通过 API 调用(页面)访问这些数据。存储和访问它的正确方法是什么?

我的服务器索引文件:

    import { createServer } from 'http'
import express from 'express'
import { parse } from 'url'
import next from 'next'
import pinoHttp from 'pino-http'

const logger = pinoHttp()
const dev = process.env.NODE_ENV !== 'production'
const nextApp = next({ dev })

try {
const handle = nextApp.getRequestHandler()
const port = process.env.NODE_PORT || 3000

nextApp.prepare().then(() => {
const app = express()
app.locals.myArray = []

// Do stuff in the background that will update the array

createServer((request, response) => {
const parsedUrl = parse(request.url, true)

logger(request, response)
handle(request, response, parsedUrl)
}).listen(port, (error?: Error) => {
if (error) throw error

console.log(`Listening on: http://localhost:${port}`)
})
})
} catch (error) {
console.log(error)
process.exit(1)
}

我的页面:

    import { Request, Response } from 'express'

export default async function (request: Request, response: Response): Promise<void> {
// Here, request.app and response.app are both undefined.
}

最佳答案

如果您的数据只需要在您的 nodejs 程序运行时持久保存,您可以使用 Map object 将其存储在 RAM 中。 .映射是键/值对的集合,很像 C# 字典、python 字典或 php 数组。

你可以在启动时只创建一次这个对象,然后像这样将它附加到你的 Express app 对象。

var app = express();
app.locals.myMap = new Map()

然后,在每个路由处理程序中,您可以像这样引用它。

const myMap = req.app.locals.myMap

然后你可以这样写代码:

let userdata = {}
const username = 'whatever'
if(myMap.has(username)) {
userdata = myMap.get(username)
}
...
myMap.set(username, userdata)

这个特定的例子为每个 username 在 Map 中存储了一个 userdata 对象。

显然,如果您的 nodejs 因任何原因停止, map 会消失得无影无踪。

你可以在app.locals中放任何你喜欢的东西;它不一定是 map 。

关于node.js - Next.js:如何在服务器端持久化数据以从页面调用访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64136445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com