From a62018a0624bf99cff8b36572fa96be47d3c802a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=88=90?= Date: Wed, 18 Mar 2026 16:16:04 +0800 Subject: [PATCH] 1 --- .vscode/launch.json | 12 ++++++++++++ 1.md | 6 +++++- server/app.js | 2 +- server/config/app_config.js | 3 ++- server/config/cron_tasks.js | 12 ++++++------ server/config/database.js | 1 + server/services/schedule_loader.js | 8 ++++---- server/services/task_executor.js | 11 +++++++---- 8 files changed, 38 insertions(+), 17 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 6d729cb..bfa3efc 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,10 +9,22 @@ "type": "node", "request": "launch", "name": "同步数据库", + "cwd": "${workspaceFolder}\\server", "skipFiles": [ "/**" ], "program": "${workspaceFolder}\\server\\scripts\\db_sync.js" + }, + { + "type": "node", + "request": "launch", + "name": "启动服务", + "skipFiles": [ + "/**" + ], + // 工作区根目录 + "cwd": "${workspaceFolder}\\server", + "program": "${workspaceFolder}\\server\\app.js" } ] } \ No newline at end of file diff --git a/1.md b/1.md index 8a6e562..2c7ec7a 100644 --- a/1.md +++ b/1.md @@ -37,4 +37,8 @@ 3. 预期成果 (Outcome) - 可视化看板: 每天自动推送一份“户外品类异动日报”。 - 爆款预警: 当监测到“防水包”类目下某新品 3 天内排名上升超过 50% 时,系统触发钉钉/邮件预警。 -- 决策支持: 提供该款产品的“避坑指南”(基于竞品售后差评分析)。 \ No newline at end of file +- 决策支持: 提供该款产品的“避坑指南”(基于竞品售后差评分析)。 + + + +"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled \ No newline at end of file diff --git a/server/app.js b/server/app.js index 1ffb267..29c0523 100644 --- a/server/app.js +++ b/server/app.js @@ -20,7 +20,7 @@ const cfg = get_app_config(); const port = cfg.server.port; await sequelize.authenticate(); -await sequelize.sync(); +// await sequelize.sync(); start_all_cron_tasks(); app.listen(port); diff --git a/server/config/app_config.js b/server/config/app_config.js index a7cf102..ae80480 100644 --- a/server/config/app_config.js +++ b/server/config/app_config.js @@ -55,7 +55,8 @@ export function get_app_config() { crx_src_path: must_get('CRX_SRC_PATH'), action_timeout_ms: get_int('ACTION_TIMEOUT_MS', 300000), puppeteer_headless: get_bool('PUPPETEER_HEADLESS', false), - chrome_executable_path: (get_env('CHROME_EXECUTABLE_PATH') || '').trim() || path.resolve(__dirname, '../../chrome-win/chrome.exe') + chrome_executable_path: (get_env('CHROME_EXECUTABLE_PATH') || '').trim() || path.resolve(__dirname, '../../chrome-win/chrome.exe'), + log_invoke_action: get_bool('LOG_INVOKE_ACTION', true) } }; diff --git a/server/config/cron_tasks.js b/server/config/cron_tasks.js index d049bad..1b3bca2 100644 --- a/server/config/cron_tasks.js +++ b/server/config/cron_tasks.js @@ -5,10 +5,10 @@ export const cron_task_list = [ // 示例:每 6 小时跑一次列表抓取 - // { - // name: 'amazon_search_list_every_6h', - // cron_expression: '0 */6 * * *', - // action_name: 'amazon_search_list', - // action_payload: { keyword: '午餐包', limit: 100 } - // } + { + name: 'amazon_search_list_every_6h', + cron_expression: '0 */1 * * *', + action_name: 'amazon_search_list', + action_payload: { keyword: '野餐包', limit: 100 } + } ]; diff --git a/server/config/database.js b/server/config/database.js index 2edf05f..921f58d 100644 --- a/server/config/database.js +++ b/server/config/database.js @@ -2,6 +2,7 @@ import { get_app_config } from './app_config.js'; export function get_sequelize_options() { const cfg = get_app_config(); + console.log( 'get_sequelize_options', cfg.mysql ); return { host: cfg.mysql.host, diff --git a/server/services/schedule_loader.js b/server/services/schedule_loader.js index db6e01e..b51975b 100644 --- a/server/services/schedule_loader.js +++ b/server/services/schedule_loader.js @@ -4,9 +4,9 @@ import { execute_action_and_record } from './task_executor.js'; const cron_jobs = []; -export function start_all_cron_tasks() { +export async function start_all_cron_tasks() { for (const task of cron_task_list) { - const job = cron.schedule(task.cron_expression, async () => { + // const job = cron.schedule(task.cron_expression, async () => { try { await execute_action_and_record({ action_name: task.action_name, @@ -16,9 +16,9 @@ export function start_all_cron_tasks() { } catch (err) { // 失败会在 crawl_run_record 落库 } - }); + // }); - cron_jobs.push(job); + // cron_jobs.push(job); } } diff --git a/server/services/task_executor.js b/server/services/task_executor.js index de1abe2..fe3c7e7 100644 --- a/server/services/task_executor.js +++ b/server/services/task_executor.js @@ -13,15 +13,18 @@ export async function execute_action_and_record(params) { let error_message = null; try { - const result = await invoke_extension_action(action_name, action_payload || {}); + + console.log( 'invoke_extension_action-start', action_name, action_payload ); + const res_invoke = await invoke_extension_action(action_name, action_payload || {}); + console.log( 'invoke_extension_action-end', action_name, result ); ok = true; - result_payload = safe_json_stringify(result); + result_payload = safe_json_stringify(res_invoke); // 按 stage 自动入库(不影响原始 run_record 记录) - await persist_amazon_result(result); + await persist_amazon_result(res_invoke.result); - return result; + return res_invoke; } catch (err) { ok = false; error_message = (err && err.message) || String(err);