在Cloud Functions中使用Cloud Functions中的把手

时间:2017-08-20 22:32:44

标签: node.js firebase handlebars.js google-cloud-functions

我正在尝试使用Firebase开发原型。

我正在使用Firebase功能。我在函数目录中的package.json文件是:

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "dependencies": {
    "express": "^4.15.4",
    "firebase-admin": "~4.2.1",
    "firebase-functions": "^0.5.7",
    "hbs": "^4.0.1"
  },
  "private": true
}

我的index.js文件如下:

const functions = require('firebase-functions');
const express = require('express');
const hbs = require('hbs');

var app = express();
app.set('view engine', hbs);

const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.getMessages = functions.https.onRequest((req, res) => {
    var abc = admin.database().ref('/messages').on("value", function(snapshot) {
        res.send(snapshot.val());
      }, function (errorObject) {
        console.log("The read failed: " + errorObject.code);
      });

  });

  exports.showMessage = functions.https.onRequest((req, res) => {
    res.render('about.hbs' , {
      pageTitle : 'About Page',
      currentYear  : new Date().getFullYear()
    });
  });

而#34; getMessage"函数工作正常,我在执行" showMessage"时遇到错误使用第三方模块HBS的功能。

功能日志显示

Error: Cannot find module 'hbs'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at new View (/var/tmp/worker/node_modules/express/lib/view.js:50:49)
    at EventEmitter.app.render (/var/tmp/worker/node_modules/express/lib/application.js:545:12)
    at ServerResponse.res.render (/var/tmp/worker/node_modules/express/lib/response.js:938:7)
    at exports.showMessage.functions.https.onRequest (/user_code/index.js:46:9)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:26:47)
    at /var/tmp/worker/worker.js:635:7

2 个答案:

答案 0 :(得分:4)

您在此处所做的是创建一个新的快速应用并将其默认视图引擎设置为hbs:

var app = express();
app.set('view engine', hbs);

但这并不会导致Cloud Functions对该应用程序执行任何操作。您刚创建的app对象就是坐在那里,未使用。

如果您想使用带云功能的快速应用,您还必须将其传递给onRequest:

exports.app = functions.https.onRequest(app);

这意味着您还必须在快速应用上配置端点,以便知道要服务的URL路径。

如果您想使用云功能的把手,为什么不从Firebase团队开始使用this sample project

答案 1 :(得分:1)

除了上面的答案。您需要做的是安装把手并整合包裹。然后写下面的代码..

const express = require('express');
const engines = require('consolidate');
const app = express();
app.engine('hbs', engines.handlebars);
app.set('views', './views');
app.set('view engine', 'hbs');

app.get('/', (req, res) => {
   res.render('index', {
    title: 'Page Title'
  });
});

这只是一个每次都适合我的样本..我希望你可以在此基础上建立......确保你创建了views。通常这就是我的结构的样子。

functions
 src
  index.ts
 views
  layouts
  partials

所有最好的男人。

你的文件应该是* .hbs扩展名