调用Mixer API获取频道数据时遇Beam非构造函数错误求助
解决Mixer API开发中“Beam is not a constructor”错误
我之前也碰到过一模一样的问题!你遇到的核心问题是beam-client-node包的导入方式不对,另外代码里还有个小坑会导致页面无法正常渲染,我给你一步步理清楚:
问题根源
你写的const Beam = require('beam-client-node');是错误的——这个包并没有把客户端构造函数作为默认导出,而是把BeamClient放在了导出对象里。直接用new Beam()自然会报错说它不是构造函数。另外,你的路由处理函数里,return beam.request(...)之后的res.render('home');永远不会执行,因为return已经提前终止了函数,客户端会一直等不到响应。
修正方案
- 调整导入方式:从包的导出对象中解构出
BeamClient - 修复异步逻辑:把页面渲染放在API请求成功之后,同时加上错误捕获避免服务器崩溃
修正后的完整代码
'use strict'; const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const path = require("path"); // 正确导入BeamClient构造函数 const { BeamClient } = require('beam-client-node'); const ejs = require("ejs"); // 实例化客户端 const beam = new BeamClient(); app.set('view engine', 'ejs'); app.use(express.static(path.join(__dirname, '/public'))); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); // 用async/await简化异步代码,可读性更高 app.get('/channel', async (req, res) => { try { // 发起API请求获取频道数据 const apiResponse = await beam.request('GET', 'channels/PootsTheCat'); const totalViewers = apiResponse.body.viewersTotal; console.log(`该频道累计观看人数:${totalViewers}`); // 请求成功后渲染页面,还可以把数据传给EJS模板 res.render('home', { totalViewers }); } catch (error) { // 捕获并处理API请求错误 console.error('获取频道数据失败:', error); res.status(500).send('获取频道信息时出现错误'); } }); app.listen(3000); console.log('服务器运行在端口3000...');
可选的Promise链式调用写法
如果你更习惯用Promise链式调用,也可以改成这样:
app.get('/channel', (req, res) => { beam.request('GET', 'channels/PootsTheCat') .then(apiResponse => { const totalViewers = apiResponse.body.viewersTotal; console.log(`该频道累计观看人数:${totalViewers}`); res.render('home', { totalViewers }); }) .catch(error => { console.error('获取频道数据失败:', error); res.status(500).send('获取频道信息时出现错误'); }); });
这样能保证只有API请求成功后才会渲染页面,同时错误也能被及时捕获处理,不会让服务器意外崩溃。
内容的提问来源于stack exchange,提问作者Leon Tinashe
相关产品推荐
相关产品推荐

