node.js - 为什么从前一个请求中获取的数据会显示在后续请求中?
问题描述
我有一个 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')))
解决方案
推荐阅读
- html - 如何改变前一个元素的样式值
- python - 如何创建正则表达式来查找 URL 内的两个文件夹中的文件?
- clojure - 这个 Clojure 宏扩展是如何工作的?
- openlayers - 如何在交互修改中更改蓝点样式
- java - 继续单击 TextView 上的另一个活动和/或片段
- vb.net - 在运行时填充预制的未绑定 datagridview 列
- mysql - MySQL 不能在连接列上使用 ORDER BY
- css - 页面上未应用 CSS 变量
- java - 使用 Cucumber 中的 AssertJ Swing 测试
- javascript - 您可以安全地向 Instagram 发出多少请求?