const NodeCache = require('node-cache'); const {Get} = require("@/api/utils"); const cache = new NodeCache({stdTTL: 601000}); let arr = [] export function interfaceCacheQuery(url, params) { return new Promise(async (resolve)=>{ // key用来从缓存里获取存在的数据 const cachedData = await cache.get(params.key); console.log(url, params, cachedData) debugger if (cachedData) { console.log('从缓存中获取数据'); // 返回缓存中的数据 // return cachedData resolve(cachedData) }else{ console.log(arr) Get(url, params).then(response => { console.log('从接口获取数据', response.data); // 从接口获取数据 cache.set(params.key, response.data, 60 * 101000); // 十分钟后过期 // return response.data; resolve(response.data) }) } }) } 循环调用该方法没有触发进入缓存获取数据,每次params.key都是相同的
时间: 2023-06-13 21:05:01 浏览: 136
在你提供的代码中,我看到 `params.key` 是作为缓存的键值进行存储和查询的。如果你循环调用该方法,但是每次 `params.key` 都相同,那么会导致缓存存储的键值相同,也就会覆盖之前的缓存数据,导致每次都要从接口获取数据。因此,你需要确保每次调用该方法时,`params.key` 的值都是唯一的,可以使用一些随机数或者时间戳等来确保唯一性。例如:
```
const key = `${url}-${JSON.stringify(params)}-${Date.now()}`;
const cachedData = await cache.get(key);
if (cachedData) {
console.log('从缓存中获取数据');
resolve(cachedData);
} else {
Get(url, params).then(response => {
console.log('从接口获取数据', response.data);
cache.set(key, response.data, 60 * 101000);
resolve(response.data);
});
}
```
这里使用了 `url`、`params` 和当前时间戳来生成唯一的键值 `key`,从而确保每次调用该方法时,都会使用不同的键值进行缓存查询和存储。
相关问题
const Koa = require('koa'); const app = new Koa(); const axios = require('axios'); const sql = require('mssql'); // const sql = require('../utils/db') // const Wechat = require('co-wechat'); // const api = require('./wechat/api'); // const config = require('./config'); // let creatMenu = async (ctx, next) =>{ // await api.creatMenu(menu); // console.log('res:',res); // } // creatMenu() // app.use(Wechat(config).middleware(async (message,ctx)=>{ // if (message.Content === 'junxin') { // return { // type:"text", // content:'是一个非常棒的公司' // } // }else{ // return '正在发展中~~~' // } // })) // 创建数据库连接配置 const config = { server: 'CRMTEST', user: 'sa', password: 'Servo01', database: 'demo' } // 创建注册信息对象 const { name, email, password } = request.body; // 创建连接池并连接数据库 sql.connect(config, (err) => { if (err) { console.log(err); return; } // 创建 request 对象 const request = new sql.Request(); // 执行插入操作 request.query(`INSERT INTO username (name, email, password) VALUES ('${name}', '${email}', '${password}')`, (err, result) => { if (err) { console.log(err); return; } console.log('用户信息已成功插入数据库'); }); }); app.listen(8280, () => { console.log('8280端口号被监听'); }) 这代码后台显示request未定义
在你的代码中,`request`变量是在创建注册信息对象时被使用,但是在这之前的位置,它还未被定义。你需要将创建连接池和连接数据库的代码块放在创建注册信息对象之后。
以下是修复后的代码示例:
```javascript
const Koa = require('koa');
const app = new Koa();
const axios = require('axios');
const sql = require('mssql');
// 创建数据库连接配置
const config = {
server: 'CRMTEST',
user: 'sa',
password: 'Servo01',
database: 'demo'
}
app.use(async (ctx) => {
// 创建注册信息对象
const { name, email, password } = ctx.request.body;
// 创建连接池并连接数据库
sql.connect(config, (err) => {
if (err) {
console.log(err);
return;
}
// 创建 request 对象
const request = new sql.Request();
// 执行插入操作
request.query(`INSERT INTO username (name, email, password) VALUES ('${name}', '${email}', '${password}')`, (err, result) => {
if (err) {
console.log(err);
return;
}
console.log('用户信息已成功插入数据库');
});
});
});
app.listen(8280, () => {
console.log('8280端口号被监听');
});
```
请注意,我还将代码块包装在了 Koa 的中间件函数中,以便在请求时执行。你可以根据实际需求进行调整。
/* eslint-disable @typescript-eslint/no-var-requires */ const path = require("path"); const webpack = require("webpack"); // fork-ts-checker-webpack-plugin需要单独安装 const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); module.exports = { entry: "./src/main", target: "node", // 置为空即可忽略webpack-node-externals插件 externals: {}, // ts文件的处理 module: { rules: [ { test: /\.ts?$/, use: { loader: "ts-loader", options: { transpileOnly: true } }, exclude: /node_modules/ }, { test: /\.node$/, loader: "node-loader", } ] }, // 打包后的文件名称以及位置 output: { filename: "main.js", path: path.resolve(__dirname, "dist") }, resolve: { extensions: [".js", ".ts", ".json"], alias: { '@common': path.resolve(__dirname, 'src', 'common'), '@config': path.resolve(__dirname, 'src', 'config'), '@projects': path.resolve(__dirname, 'src', 'projects'), '@model': path.resolve(__dirname, 'src', 'model'), '@data': path.resolve(__dirname, 'src', 'data'), '@utils': path.resolve(__dirname, 'src', 'utils'), }, // fallback:{ // crypto: require.resolve("crypto-browserify"), // stream: require.resolve("stream-browserify"), // } }, plugins: [ // 需要进行忽略的插件 new webpack.IgnorePlugin({ checkResource(resource) { const lazyImports = [ "@nestjs/microservices", "@nestjs/microservices/microservices-module", "@nestjs/websockets/socket-module", "cache-manager", "class-validator", "class-transformer", "class-transformer/storage" ]; if (!lazyImports.includes(resource)) { return false; } try { require.resolve(resource, { paths: [process.cwd()] }); } catch (err) { return true; } return false; } }), new ForkTsCheckerWebpackPlugin() ] };
根据您提供的代码,可以看出这是一个webpack的配置文件,用于将TypeScript代码编译为JavaScript代码并打包输出。根据您的错误信息,可能是因为您在代码中使用了一个名为hexoid的函数,但是该函数并没有被正确引入或定义。您可以检查一下您的代码中是否引入了hexoid函数,并且该函数是否被正确定义。另外,如果您使用的是第三方库中的hexoid函数,可能需要先安装或更新该库才能使用其中的函数。希望能对您有所帮助。
阅读全文