news 2026/4/18 4:12:17

NodeTube API参考手册:完整接口文档与使用示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NodeTube API参考手册:完整接口文档与使用示例

NodeTube API参考手册:完整接口文档与使用示例

【免费下载链接】nodetubeOpen-source YouTube alternative that offers video, audio and image uploads, livestreaming and built-in monetization项目地址: https://gitcode.com/gh_mirrors/no/nodetube

NodeTube是一个开源的YouTube替代平台,提供视频、音频和图片上传、直播流以及内置的货币化功能。本手册详细介绍了NodeTube的API接口,帮助开发者快速集成和扩展平台功能。

一、API概览

NodeTube的API采用RESTful设计风格,主要分为用户认证、内容管理、媒体操作和直播管理四大模块。所有API端点均以/api开头,支持标准的HTTP方法(GET、POST、PUT、DELETE)。

NodeTube API架构示意图,展示了各模块间的交互流程

核心功能关键词

  • 用户认证与授权
  • 视频/音频上传与管理
  • 直播流控制
  • 评论与互动
  • 订阅与通知

二、快速开始

环境准备

  1. 克隆仓库

    git clone https://gitcode.com/gh_mirrors/no/nodetube cd nodetube npm install
  2. 配置环境变量创建.env文件,设置必要参数:

    DOMAIN_NAME_AND_TLD=yourdomain.com FRONTEND_SERVER=frontend UPLOAD_SERVER=uploads
  3. 启动服务

    npm start

API基础信息

  • 基础URLhttps://yourdomain.com/api
  • 认证方式:JWT Token(通过登录接口获取)
  • 数据格式:JSON
  • 响应状态码
    • 200: 成功
    • 400: 请求错误
    • 401: 未授权
    • 404: 资源不存在
    • 500: 服务器错误

三、用户认证API

登录接口

请求

POST /api/login

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | email | string | 用户邮箱或频道URL | 是 | | password | string | 用户密码 | 是 |

响应

{ "success": true, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": "5f8d0d55b54764421b7156d5", "channelUrl": "demo_user", "channelName": "Demo User" } }

代码示例

// controllers/backend/account.js 第63行 exports.postLogin = async(req, res, next) => { // 验证请求参数 req.assert('password', 'Password cannot be blank').notEmpty(); // passport认证逻辑 passport.authenticate('local', (err, user, info) => { if (err) return next(err); if (!user) { req.flash('errors', info); return res.redirect('/login'); } // 生成JWT令牌并返回 req.logIn(user, (err) => { // ... }); })(req, res, next); };

注册接口

请求

POST /api/signup

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | channelUrl | string | 频道用户名(3-25字符,仅字母数字下划线) | 是 | | password | string | 密码(至少4字符) | 是 | | confirmPassword | string | 确认密码 | 是 |

响应

{ "success": true, "message": "Account created successfully", "userId": "5f8d0d55b54764421b7156d5" }

四、内容管理API

上传视频

请求

POST /api/upload

权限:已认证用户

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | file | multipart/form-data | 视频文件 | 是 | | title | string | 视频标题 | 是 | | description | string | 视频描述 | 否 | | category | string | 分类 | 是 | | visibility | string | 可见性(public/unlisted/private) | 否 |

响应

{ "success": true, "uniqueTag": "abc123xyz", "uploadUrl": "https://uploads.yourdomain.com/uploads/demo_user/abc123xyz.mp4" }

代码示例

// routes.js 第54行 app.post('/upload', uploadingController.postFileUpload);

编辑视频信息

请求

POST /api/upload/:uniqueTag/edit

权限:视频上传者或管理员

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | title | string | 新标题 | 否 | | description | string | 新描述 | 否 | | category | string | 新分类 | 否 | | rating | string | 内容评级 | 否 | | visibility | string | 可见性 | 否 |

响应

{ "success": true, "message": "Upload updated successfully" }

代码示例

// controllers/backend/internalApi.js 第627行 exports.editUpload = async(req, res, next) => { try { const uniqueTag = req.params.uniqueTag; let upload = await Upload.findOne({ uniqueTag }).populate('uploader'); // 权限检查 const isUser = req.user && (req.user._id.toString() == upload.uploader._id.toString()); if (!isUser && !isAdminOrModerator) { return res.render('error/403'); } // 更新视频信息 upload.title = req.body.title; upload.description = req.body.description; upload.category = req.body.category; // ... await upload.save(); return res.send('success'); } catch (err) { // 错误处理 } };

五、媒体互动API

发表评论

请求

POST /api/comment

权限:已认证用户

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | upload | string | 视频ID | 是 | | comment | string | 评论内容 | 是 | | commentId | string | 回复的评论ID(可选) | 否 |

响应

{ "success": true, "comment": { "id": "5f8d10a2b54764421b7156d6", "text": "Great video!", "timeAgo": "just now" } }

视频点赞/反应

请求

POST /api/react/:upload/:user

权限:已认证用户

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | emoji | string | 反应类型(like/love/laugh/sad/dislike/disgust) | 是 |

响应

{ "success": true, "status": "new react created" }

代码示例

// controllers/backend/internalApi.js 第549行 exports.react = async(req, res, next) => { // 权限验证 if (`${req.user._id}` !== req.params.user) { return res.send('Not authorized'); } // 查找现有反应 const existingReact = await React.findOne({ upload: req.params.upload, user: req.params.user }); // 创建或更新反应 if (!existingReact) { newReact = new React({ upload: req.params.upload, user: req.params.user, react: req.body.emoji, active: true }); await newReact.save(); } else if (existingReact && existingReact.active) { // 处理反应更新逻辑 } // 创建通知 await createNotification(upload.uploader._id, req.user._id, 'react', upload, newReact); res.send('new react created'); };

六、直播管理API

开始直播

请求

POST /api/livestream/start

权限:已认证用户(需要直播权限)

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | title | string | 直播标题 | 是 | | description | string | 直播描述 | 否 | | category | string | 分类 | 是 |

响应

{ "success": true, "streamKey": "live_abcd1234", "rtmpUrl": "rtmp://yourdomain.com/live" }

结束直播

请求

POST /api/livestream/end

权限:直播发起者

参数| 参数名 | 类型 | 描述 | 必需 | |--------|------|------|------| | streamId | string | 直播ID | 是 |

响应

{ "success": true, "recordingUrl": "https://uploads.yourdomain.com/live_recordings/demo_user/stream123.mp4" }

NodeTube直播流程示意图,展示了从推流到播放的完整链路

七、错误处理

API错误响应格式统一为:

{ "success": false, "error": { "code": "ERROR_CODE", "message": "Human readable error message" } }

常见错误码:

  • INVALID_PARAMS: 请求参数无效
  • AUTH_REQUIRED: 需要认证
  • PERMISSION_DENIED: 权限不足
  • RESOURCE_NOT_FOUND: 资源不存在
  • RATE_LIMIT_EXCEEDED: 请求频率超限

八、接口调用示例

使用JavaScript调用评论API

async function postComment(uploadId, commentText) { const token = localStorage.getItem('jwt_token'); const response = await fetch('/api/comment', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ upload: uploadId, comment: commentText }) }); const result = await response.json(); if (result.success) { console.log('Comment posted successfully'); } else { console.error('Error posting comment:', result.error.message); } }

九、扩展与定制

NodeTube的API设计允许开发者轻松扩展功能。主要扩展点包括:

  1. 自定义认证:修改config/passport.js实现第三方登录
  2. 新API端点:在routes.js中添加新路由,对应controllers/backend中的处理函数
  3. 事件钩子:利用lib/helpers/notifications.js添加自定义通知逻辑

十、API文档更新日志

  • v1.0:初始版本,包含用户认证、视频上传和评论功能
  • v1.1:添加直播流管理API
  • v1.2:增加内容评级和敏感内容过滤API

附录:完整API列表

端点方法描述权限
/api/loginPOST用户登录公开
/api/signupPOST用户注册公开
/api/uploadPOST上传媒体文件已认证
/api/upload/:uniqueTag/editPOST编辑媒体信息上传者/管理员
/api/commentPOST发表评论已认证
/api/react/:upload/:userPOST媒体反应已认证
/api/subscribePOST订阅频道已认证
/api/livestream/startPOST开始直播已认证
/api/livestream/endPOST结束直播直播者

完整API文档可参考项目源代码:controllers/backend/

【免费下载链接】nodetubeOpen-source YouTube alternative that offers video, audio and image uploads, livestreaming and built-in monetization项目地址: https://gitcode.com/gh_mirrors/no/nodetube

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:10:43

企业文档问答系统,为什么总是答非所问?

很多企业以为给大模型喂进几十万份文档,就能得到一个全知全能的“超级大脑”。但现实往往极其尴尬:当员工针对一份具体的业务手册提问时,系统常常张冠李戴、胡言乱语,甚至干脆回答“文档中未提及”。企业文档问答为什么会变成“人…

作者头像 李华
网站建设 2026/4/18 4:08:27

nginx常见问题记录

之前学习了nginx的基本配置后 个人项目运用过 正好最近公司的项目需要将手上的工作独立拆分出来 于是就需要我这独立配置一套新的nginx 在过程中也发现了不少之前没注意到的问题 (所以说实践还是检验问题的唯一方法啊 汗(lll¬ω¬) &#xff…

作者头像 李华