【发布时间】:2021-09-15 12:23:19
【问题描述】:
我正在创建一个跟踪游戏中的击杀统计数据的网站,但我每次请求只能访问 50 个键值对,因此为了确保我的数据准确,我想大约每 30 秒发出一次请求。
我觉得我可能在实施的某个阶段出错了。就像,也许有一种方法可以发出不涉及使用的请求
express.get('/route/', (req, res) => { //code })
语法,我只是不知道。简而言之,我想要的是数据库每 30 秒更新一次,而无需刷新浏览器。我已经尝试将我的 get 请求包装在一个函数中并将其置于设定的时间间隔内,但它仍然没有运行。
const express = require('express');
const zkillRouter = express.Router();
const axios = require('axios');
const zkillDbInit = require('../utils/zkillTableInit');
const sqlite3 = require('sqlite3').verbose();
zkillDbInit();
let db = new sqlite3.Database('zkill.db');
setInterval(() => {
zkillRouter.get('/', (req, res)=>{
axios.get('https://zkillboard.com/api/kills/w-space/', {headers: {
'accept-encoding':'gzip',
'user-agent': 'me',
'connection': 'close'
}})
.then(response => {
// handle success
const wormholeData = (response.data)
res.status(200);
//probably not the best way to do this but it's fine for now.
for (let i = 0; i < Object.keys(wormholeData).length; i++) {
const currentZKillId = Object.keys(wormholeData)[i]
const currentHash = Object.values(wormholeData)[i]
let values = {
$zkill_id: currentZKillId,
$hash: currentHash
};
//puts it in the database
db.run(`INSERT INTO zkill (zkill_id, hash) VALUES ($zkill_id, $hash)`,
values
, function(err){
if(err){
throw(err)
}
})
}
})
})
}, 1000)
module.exports = zkillRouter;
我考虑过的一件事是,我不一定需要此功能成为同一个程序的一部分。我所需要的只是数据库,所以如果必须的话,我可以单独运行此代码,例如,终端只是一个小节点程序,它向 api 发出请求并更新数据库。我认为这不是理想的,但如果这是做我想做的唯一方法,那么我会考虑它。
澄清:.get() 方法是在 zkillRouter 上调用的,它是在第二行声明的 express.Router() 的一个实例。这反过来又通过 apiRouter 链接回我的 app.js 文件,因此完整的路由是 localhost:5000/api/zkill/。这是问题的很大一部分,我不知道你可以在不指定路由的情况下调用 axios.get,所以我被困了一段时间。
【问题讨论】:
-
请edit澄清您的问题。是什么调用了您在示例代码中定义的
.get()路由方法?
标签: node.js http backend setinterval node-sqlite3