首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS & GCP PubSub - TypeError: PubSub不是Object.<anonymous>的构造函数

NodeJS & GCP PubSub - TypeError: PubSub不是Object.<anonymous>的构造函数
EN

Stack Overflow用户
提问于 2020-02-09 20:08:58
回答 2查看 2.1K关注 0票数 2

我正在学习https://www.woolha.com/tutorials/node-js-google-cloud-pub-sub-basic-examples的教程,但遇到了一些困难..

我在server.js中有以下代码:

代码语言:javascript
复制
const express = require('express');
const app = express();
const path = require('path');
const bodyParser = require('body-parser');


const dotenv = require('dotenv');
dotenv.config(); // Reads the .env file from the local folder.

// PubSub constant initialisation
const PubSub = require(`@google-cloud/pubsub`);
const pubsub = new PubSub();
const data = new Date().toString();
const dataBuffer = Buffer.from(data);
const topicName = 'sensehat-led-config';


app.use(bodyParser.urlencoded({ extended: true}));

// Tell the app to use the public folder.
app.use(express.static('public'));

app.get('/', (req,res) => {
    res.send('Hello from App Engine!');
})

app.get('/submit', (req, res) => {
    res.sendFile(path.join(__dirname, '/views/form.html'));
})

// Need to figure out how to get the css file to work in this.  Can't be that hard.
app.get('/sensehat', (req, res) => {
    res.sendFile(path.join(__dirname, '/views/sensehat.html'));
})


app.get('/sensehat-publish-message', (req, res) =>{
    pubsub
        .topic(topicName)
        .publisher()
        .publish(dataBuffer)
        .then(messageId => {
            console.log(`Message ${messageId} published`);
        })
        .catch(err => {
            console.error('ERROR:', err);
        });
})


app.post('/submit', (req, res) => {
    console.log({
        name: req.body.name,
        message: req.body.message
    });
res.send('Thanks for your message!');
})

// Listen to the App Engine-specified port, or 8080 otherwise
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
    console.log('Server listening on port ${PORT}...');
})

但是当我运行它时,我得到一个'500 Server Error',并且查看Stackdriver日志,我得到以下错误:-

TypeError: PubSub is not a constructor at Object.<anonymous>

我绝对是NodeJS的新手,正在摸索我的路。在仔细阅读之后,我认为这个问题来自于

代码语言:javascript
复制
const PubSub = require(`@google-cloud/pubsub`);
const pubsub = new PubSub();

线,但不知道如何纠正这一点。

EN

回答 2

Stack Overflow用户

发布于 2020-02-09 20:17:10

您需要默认导出@google-cloud/pubsub,但查找内容不在默认导出中。

将导入PubSub的方式更改为:

代码语言:javascript
复制
const {PubSub} = require(`@google-cloud/pubsub`);

而不是:

代码语言:javascript
复制
const PubSub = require(`@google-cloud/pubsub`);
票数 1
EN

Stack Overflow用户

发布于 2020-02-10 14:16:02

您可以尝试使用所有库的最新版本。package.json中的依赖项

代码语言:javascript
复制
"dependencies": {
    "@google-cloud/pubsub": "1.5.0",
    "google-gax": "1.14.1",
    "googleapis": "47.0.0"
  }

示例代码:

代码语言:javascript
复制
const {
  PubSub
} = require('@google-cloud/pubsub');

const pubsub = new PubSub({
  projectId: process.env.PROJECT_ID
});

module.exports = {
  publishToTopic: function(topicName, data) {
    return pubsub.topic(topicName).publish(Buffer.from(JSON.stringify(data)));
  },
};

调用文件代码

代码语言:javascript
复制
const PubSubPublish = require('path to your above file')
let publishResult = await PubSubPublish.publishToTopic(process.env.TOPIC_NAME, data)

希望它能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60136446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档