首页 > 解决方案 > 为什么从前一个请求中获取的数据会显示在后续请求中?

问题描述

我有一个 api 调用,它从 json 文件(模板)发送数据,在将模板发送到客户端之前,我对数据存储服务进行了 api 调用,以查看是否存在现有数据。如果有现有数据,我将数据附加到模板中,并使用新的键值存储,例如。

//res object without existing data
{
  template: templateData
}

//res object if there are existing data
{
  template: templateData,
  existingData: existingData
}

这是我的 api 路线/resource1/:resource1ID/resource2

我遇到的问题是,当我收到/resource1/123/resource2 此调用的请求时,将调用数据存储服务并将一些现有数据附加到 res obj,但是对另一个resourceId 999现有数据的另一个调用resourceId 123附加到 res obj 即使我收到了不同资源 ID 的请求。

我已确认数据存储调用中没有现有数据。最初我认为现有数据缓存在浏览器的某处,但 res obj 存在于服务器端。我尝试创建一个中间件来设置以下这些标头

res.setHeader('Surrogate-Control', 'no-store'); 
res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate'); res.setHeader('Pragma', 'no-cache'); 
res.setHeader('Expires', '0')

但无济于事,问题仍然存在。我想不出这些数据可以存储在哪里,我目前的解决方法是在数据存储没有现有数据时设置条件我existingData在发送 res obj 之前手动删除键值对,但这个解决方案似乎是错误的。

如果有人能指出我应该把研究重点放在哪里,那将不胜感激。

//this is my current server middlewares
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(busboy())
app.use(cookieParser())
app.use(session({
    ...config.session,
    store: sessionStore
}))
app.use(passport.initialize())
app.use(passport.session())
app.use(cors(/*cors stuff*/))
app.use(express.static(path.join(__dirname, 'public')))

标签: node.jsexpress

解决方案


推荐阅读