gpt4 book ai didi

node.js - 在 express 中间件中获取状态码

转载 作者:搜寻专家 更新时间:2023-10-31 22:17:55 25 4
gpt4 key购买 nike

我尝试将一些请求缓存到静态文件,这些文件可以由中间件直接由 nginx 提供服务。

核心代码:

function PageCache(config) {
config = config || {};
root = config.path || os.tmpdir() + "/_viewcache__";
return function (req, res, next) {
var key = req.originalUrl || req.url;
var shouldCache = key.indexOf("search") < 0;
if (shouldCache) {
var extension = path.extname(key).substring(1);
if (extension) {

} else {
if (key.match(/\/$/)) {
key = key + "index.html"
} else {
key = key + ".html";
}
}

var cacheFilePath = path.resolve(root + key)
try {

res.sendResponse = res.send;
res.send = function (body) {
res.sendResponse(body);

// cache file only if response status code is 200
cacheFile(cacheFilePath, body);
}
}
catch (e) {
console.error(e);
}
}
next()
}
}

但是我发现无论状态代码如何,所有响应都会被缓存,而代码为 404,410,500 或其他内容的响应不应该被缓存。

但是我找不到像res.statusres.get('status') 这样可以用来获取当前请求状态码的api .

任何替代解决方案?

最佳答案

您可以覆盖响应结束时调用的 res.end 事件。每当响应结束时,您都可以获得响应的 statusCode

希望对你有帮助

var end = res.end;

res.end = function(chunk, encoding) {
if(res.statusCode == 200){
// cache file only if response status code is 200
cacheFile(cacheFilePath, body);
}

res.end = end;
res.end(chunk, encoding);
};

关于node.js - 在 express 中间件中获取状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41009876/

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