| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /**
- * Docker Hub 代理路由
- */
- const express = require('express');
- const router = express.Router();
- const axios = require('axios');
- const logger = require('../logger');
- // Docker Hub API 基础 URL
- const DOCKER_HUB_API = 'https://hub.docker.com/v2';
- // 搜索镜像
- router.get('/search', async (req, res) => {
- try {
- const { term, page = 1, limit = 25 } = req.query;
-
- // 确保有搜索关键字
- if (!term) {
- return res.status(400).json({ error: '缺少搜索关键字(term)' });
- }
-
- logger.info(`搜索 Docker Hub: 关键字="${term}", 页码=${page}`);
-
- const response = await axios.get(`${DOCKER_HUB_API}/search/repositories`, {
- params: {
- query: term,
- page,
- page_size: limit
- },
- timeout: 10000
- });
-
- res.json(response.data);
- } catch (err) {
- logger.error('Docker Hub 搜索失败:', err.message);
- res.status(500).json({ error: 'Docker Hub 搜索失败', details: err.message });
- }
- });
- // 获取镜像标签
- router.get('/tags/:owner/:repo', async (req, res) => {
- try {
- const { owner, repo } = req.params;
- const { page = 1, limit = 25 } = req.query;
-
- logger.info(`获取镜像标签: ${owner}/${repo}, 页码=${page}`);
-
- const response = await axios.get(
- `${DOCKER_HUB_API}/repositories/${owner}/${repo}/tags`, {
- params: {
- page,
- page_size: limit
- },
- timeout: 10000
- });
-
- res.json(response.data);
- } catch (err) {
- logger.error('获取 Docker 镜像标签失败:', err.message);
- res.status(500).json({ error: '获取镜像标签失败', details: err.message });
- }
- });
- // 直接导出路由实例
- module.exports = router;
|