我有一个Express应用程序,可从大量网站中提取数据。要做到这一点,目前我必须运行一个路由(例如localhost / scrapdata)的任务,它获取数据并将其存储在我的pgsql数据库中。此任务无限运行。
我有其他路由从我的数据库中获取数据。
用路线开始我的刮擦任务是一个好策略吗?还是有其他策略?
答案 0 :(得分:0)
这不是一个Express应用程序,而是一个简单的Node.js脚本,它以指定的时间间隔被触发。您要找的是Cron。
如果您想保留当前的Express应用程序,那么我建议保留当前的结构,但使用node-schedule之类的内容。所以在另一个文件中,你可以有类似的东西:
// my-job.js
const schedule = require('node-schedule')
module.exports = schedule.scheduleJob('42 * * * *', () => {
console.log('The answer to life, the universe, and everything!')
})
然后在您的主app.js
中,只需导入文件即可开始工作:
const express = require('express')
...
require('./my-job')
然后在/shutdown
之类的其他路线中,您可以这样做:
const express = require('express')
const j = require('./my-job')
const router = express.Router()
router.get('/shutdown', () => {
j.cancel()
res.json({ message: 'Canceled.' })
})
这只是一个想法,上面还没有经过测试。
请记住,抓取网站是一个灰色地带。如果他们提供API,请改用它。