# NewsPulse **Repository Path**: ereddate2017/news-pulse ## Basic Information - **Project Name**: NewsPulse - **Description**: NewsPulse一个现代化的 RSS 新闻聚合阅读器,提供多端支持,让用户可以在任何设备上阅读和管理新闻内容。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-26 - **Last Updated**: 2025-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NewsPulse 新闻脉搏 一个功能完整的跨平台新闻阅读器系统,支持 Web、桌面端、浏览器扩展和微信小程序。 ## 项目概述 本系统是一个现代化的 RSS 新闻聚合阅读器,提供多端支持,让用户可以在任何设备上阅读和管理新闻内容。 ## 技术栈 ### 后端服务 - **Node.js** - 运行环境 - **Express** - Web 框架 - **SQLite** - 数据库 - **Socket.io** - 实时通信 - **JWT** - 身份认证 - **Winston** - 日志管理 - **node-schedule** - 定时任务 - **xml2js** - RSS 解析 ### 前端 Web 应用 - **Vue 3** - 前端框架 - **Vite** - 构建工具 - **Vant 4** - UI 组件库 - **Vue Router** - 路由管理 - **Pinia** - 状态管理 - **Axios** - HTTP 客户端 - **Socket.io-client** - 实时通信 ### Electron 桌面应用 - **Electron** - 桌面应用框架 - **electron-packager** - 应用打包 ### Chrome 扩展 - **Chrome Extension API** - 浏览器扩展接口 ### 微信小程序 - **微信小程序框架** - 移动端开发 ## 系统架构 ``` 新闻阅读器系统 ├── 后端服务 (Node.js + Express + SQLite) ├── 前端 Web 应用 (Vue 3 + Vite) ├── Electron 桌面应用 ├── Chrome 浏览器扩展 └── 微信小程序 ``` ## 核心功能 ### 通用功能 - 用户注册与登录(JWT 认证) - RSS 源订阅与管理 - 文章分类浏览 - 全文搜索 - 点赞与收藏 - 评论互动 - 稍后阅读 - 阅读历史记录 - 实时通知推送 ### 后端服务 - RSS 源自动采集(定时任务) - 多源并发采集 - 文章内容过滤 - 中文分词支持 - 全文搜索(FTS) - 数据库迁移管理 - API 接口(RESTful) - WebSocket 实时通信 ### 前端 Web 应用 - 响应式设计 - 暗黑模式支持 - 个性化设置 - 阅读统计 - 热门推荐 - 懒加载优化 - 图片懒加载 ### Electron 桌面应用 - 原生桌面体验 - 系统托盘支持 - 离线阅读支持 - 本地数据缓存 ### Chrome 扩展 - 快速访问本地服务 - 浏览器集成 - 一键打开应用 ### 微信小程序 - 移动端优化 - 离线阅读 - 社交分享 ## 快速开始 ### 环境要求 - Node.js >= 18.0.0 - npm >= 9.0.0 - 微信开发者工具(小程序开发) ### 安装依赖 ```bash # 安装后端依赖 npm install # 安装前端依赖 cd frontend npm install # 安装 Electron 依赖 cd ../electron npm install ``` ### 启动服务 #### 1. 启动后端服务 ```bash # 在项目根目录 npm start ``` 后端服务将在 `http://localhost:3000` 启动 #### 2. 启动前端 Web 应用 ```bash cd frontend npm run dev ``` 前端应用将在 `http://localhost:5173` 启动 #### 3. 启动 Electron 桌面应用 ```bash cd electron npm start ``` #### 4. 加载 Chrome 扩展 1. 打开 Chrome 浏览器 2. 访问 `chrome://extensions/` 3. 启用"开发者模式" 4. 点击"加载已解压的扩展程序" 5. 选择 `chrome-extension` 目录 #### 5. 运行微信小程序 1. 打开微信开发者工具 2. 导入 `wechat-miniprogram` 目录 3. 点击编译运行 ## 项目结构 ``` . ├── src/ # 后端服务源代码 │ ├── api/ # API 接口 │ │ ├── controllers/ # 控制器 │ │ ├── middleware/ # 中间件 │ │ └── routes/ # 路由 │ ├── config/ # 配置文件 │ ├── crawler/ # RSS 采集器 │ ├── logger/ # 日志系统 │ ├── migration/ # 数据库迁移 │ ├── monitoring/ # 监控系统 │ ├── parser/ # RSS 解析器 │ ├── storage/ # 数据库操作 │ └── utils/ # 工具函数 ├── frontend/ # 前端 Web 应用 │ ├── src/ │ │ ├── components/ # Vue 组件 │ │ ├── router/ # 路由配置 │ │ ├── services/ # API 服务 │ │ ├── store/ # Pinia 状态管理 │ │ ├── utils/ # 工具函数 │ │ └── views/ # 页面视图 │ └── public/ # 静态资源 ├── electron/ # Electron 桌面应用 │ ├── main.js # 主进程 │ ├── preload.js # 预加载脚本 │ └── resources/ # 应用资源 ├── chrome-extension/ # Chrome 扩展 │ ├── manifest.json # 扩展配置 │ ├── background.js # 后台脚本 │ └── popup.html # 弹出页面 ├── wechat-miniprogram/ # 微信小程序 │ ├── pages/ # 小程序页面 │ ├── utils/ # 工具函数 │ ├── app.js # 小程序入口 │ └── app.json # 小程序配置 ├── index.js # 后端入口文件 ├── package.json # 项目配置 └── README.md # 项目文档 ``` ## API 文档 ### 认证接口 #### 用户注册 ```http POST /api/v1/auth/register Content-Type: application/json { "username": "testuser", "email": "test@example.com", "password": "password123" } ``` #### 用户登录 ```http POST /api/v1/auth/login Content-Type: application/json { "username": "testuser", "password": "password123" } Response: { "token": "jwt_token_here", "user": { "id": 1, "username": "testuser", "email": "test@example.com" } } ``` ### 文章接口 #### 获取文章列表 ```http GET /api/v1/items?page=1&limit=20 Authorization: Bearer ``` #### 获取文章详情 ```http GET /api/v1/items/:id Authorization: Bearer ``` #### 点赞文章 ```http POST /api/v1/items/:id/like Authorization: Bearer ``` #### 取消点赞 ```http POST /api/v1/items/:id/unlike Authorization: Bearer ``` #### 收藏文章 ```http POST /api/v1/items/:id/favorite Authorization: Bearer ``` #### 添加到稍后阅读 ```http POST /api/v1/items/:id/read-later Authorization: Bearer ``` ### 评论接口 #### 获取文章评论 ```http GET /api/v1/items/:id/comments Authorization: Bearer ``` #### 发表评论 ```http POST /api/v1/items/:id/comments Authorization: Bearer Content-Type: application/json { "content": "评论内容" } ``` ### RSS 源接口 #### 获取 RSS 源列表 ```http GET /api/v1/feeds Authorization: Bearer ``` #### 添加 RSS 源 ```http POST /api/v1/feeds Authorization: Bearer Content-Type: application/json { "name": "源名称", "url": "https://example.com/rss" } ``` #### 删除 RSS 源 ```http DELETE /api/v1/feeds/:id Authorization: Bearer ``` ### 分类接口 #### 获取分类列表 ```http GET /api/v1/categories Authorization: Bearer ``` ### 搜索接口 #### 搜索文章 ```http GET /api/v1/search?q=关键词 Authorization: Bearer ``` ## 数据库结构 ### 主要表结构 #### users - 用户表 ```sql CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, email TEXT UNIQUE NOT NULL, password TEXT NOT NULL, avatar TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` #### feeds - RSS 源表 ```sql CREATE TABLE feeds ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, url TEXT UNIQUE NOT NULL, category TEXT, description TEXT, image TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` #### items - 文章表 ```sql CREATE TABLE items ( id INTEGER PRIMARY KEY AUTOINCREMENT, feed_id INTEGER, title TEXT NOT NULL, link TEXT UNIQUE NOT NULL, description TEXT, content TEXT, pub_date DATETIME, author TEXT, category TEXT, image TEXT, tags TEXT, click_count INTEGER DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (feed_id) REFERENCES feeds(id) ); ``` #### likes - 点赞表 ```sql CREATE TABLE likes ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, item_id INTEGER NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES items(id), UNIQUE(user_id, item_id) ); ``` #### comments - 评论表 ```sql CREATE TABLE comments ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, item_id INTEGER NOT NULL, content TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES items(id) ); ``` #### favorites - 收藏表 ```sql CREATE TABLE favorites ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, item_id INTEGER NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES items(id), UNIQUE(user_id, item_id) ); ``` #### reading_history - 阅读历史表 ```sql CREATE TABLE reading_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, item_id INTEGER NOT NULL, read_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES items(id) ); ``` #### read_later - 稍后阅读表 ```sql CREATE TABLE read_later ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, item_id INTEGER NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES items(id), UNIQUE(user_id, item_id) ); ``` ## 配置说明 ### 环境变量 创建 `.env` 文件: ```env # 服务器配置 PORT=3000 NODE_ENV=development # JWT 配置 JWT_SECRET=your-secret-key-here JWT_EXPIRES_IN=7d # 数据库配置 DB_PATH=./news_app.db # RSS 采集配置 CRAWL_INTERVAL=30 CONCURRENT_REQUESTS=5 # 日志配置 LOG_LEVEL=info LOG_DIR=./logs ``` ### 后端配置 编辑 `src/config/config.js`: ```javascript module.exports = { server: { port: process.env.PORT || 3000, host: '0.0.0.0' }, jwt: { secret: process.env.JWT_SECRET || 'default-secret', expiresIn: process.env.JWT_EXPIRES_IN || '7d' }, database: { path: process.env.DB_PATH || './news_app.db' }, crawler: { interval: parseInt(process.env.CRAWL_INTERVAL) || 30, concurrent: parseInt(process.env.CONCURRENT_REQUESTS) || 5 } }; ``` ## 部署指南 ### Docker 部署 #### 后端服务 Dockerfile ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production COPY . . EXPOSE 3000 CMD ["node", "index.js"] ``` #### 构建和运行 ```bash # 构建镜像 docker build -t news-reader-backend . # 运行容器 docker run -d -p 3000:3000 --name news-reader news-reader-backend ``` ### PM2 部署 ```bash # 安装 PM2 npm install -g pm2 # 启动服务 pm2 start index.js --name news-reader # 查看状态 pm2 status # 查看日志 pm2 logs news-reader # 重启服务 pm2 restart news-reader # 停止服务 pm2 stop news-reader ``` ### Nginx 反向代理 ```nginx server { listen 80; server_name your-domain.com; # 前端静态文件 location / { root /path/to/frontend/dist; try_files $uri $uri/ /index.html; } # 后端 API location /api/ { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } # WebSocket location /socket.io/ { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` ### Electron 应用打包 ```bash cd electron # 打包 Windows 应用 npm run build # 打包后的应用在 build-new 目录 ``` ## 开发指南 ### 代码规范 - 使用 ESLint 进行代码检查 - 遵循 RESTful API 设计规范 - 使用 async/await 处理异步操作 - 统一的错误处理机制 ### 添加新功能 1. **后端 API** - 在 `src/api/controllers/` 创建控制器 - 在 `src/api/routes/` 创建路由 - 在 `src/storage/` 添加数据库操作 2. **前端页面** - 在 `frontend/src/views/` 创建页面组件 - 在 `frontend/src/router/index.js` 添加路由 - 在 `frontend/src/services/api.js` 添加 API 调用 3. **数据库迁移** - 在 `src/migration/migrations/` 创建 SQL 文件 - 运行迁移脚本 ### 测试 ```bash # 运行后端测试 npm test # 运行前端测试 cd frontend npm test ``` ## 常见问题 ### Q: 如何添加新的 RSS 源? A: 可以通过前端界面的"添加源"功能添加,或者直接调用 API。 ### Q: 如何修改采集频率? A: 修改 `.env` 文件中的 `CRAWL_INTERVAL` 配置(单位:分钟)。 ### Q: 数据库文件在哪里? A: 默认在项目根目录的 `news_app.db`。 ### Q: 如何重置数据库? A: 运行 `node reset_db.js` 脚本。 ### Q: 如何查看日志? A: 日志文件在 `logs/` 目录下,按日期分类。 ## 贡献指南 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建 Pull Request ## 许可证 MIT License ## 联系方式 - 项目地址: https://gitee.com/ereddate2017/news-pulse.git - 问题反馈: https://gitee.com/ereddate2017/news-pulse/issues - 邮箱: 18900360@qq.com ## 更新日志 ### v1.0.0 (2024-12-26) - 初始版本发布 - 支持多端应用(Web、Electron、Chrome、微信小程序) - 完整的用户认证系统 - RSS 源管理和自动采集 - 文章阅读和互动功能 - 实时通知推送 - 全文搜索功能 - 阅读历史和稍后阅读 - 数据统计和分析 --- **注意**: 本项目仅供学习和研究使用,请勿用于商业用途。