如何在Firebase上托管Nodejs / Express后端?

时间:2018-08-02 22:45:18

标签: javascript node.js firebase express firebase-hosting

我对NodeJ和Firebase很陌生。当前,我有一个具有Express和以下文件结构的NodeJs项目:

` + /root
    + /db
       - user.js
    + /domain
       - user.js
    + /node_modules
       - ...
    + /routes
       - routes.js
    - sever.js
    - config.json`

我想在Firebase上托管它,但它为我添加了文件index.html和其他文件。如果我尝试使用Cloud函数,它将添加我/ functions并在其中添加一个“ index.js”文件,如下所示:

` + /root
    + /db
       - user.js
    + /domain
       - user.js
    + /functions
       - index.js
    + /node_modules
       - ...
    + /routes
       - routes.js
    - sever.js
    - config.json
    -firebase.json`

我尝试将我的server.js代码粘贴到index.js内,但由于引用和缺少的包而导致错误。

这是我的index.js代码:

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

var express = require('express');
var bodyparser = require('body-parser');

var app = express();

// Use bodyParser to parse the parameters
app.use(bodyparser.urlencoded({extended: true}));
app.use(bodyparser.json({limit: '10mb'}));

// Call the routes
require('../routes/routes')(app);

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

还有我的route.js代码:

var userRoute = require('./users');

//Register routes and link to functions
module.exports = function(app){
    app.post('/register', user.userRoute);
}

我的firebase.json

{
    "hosting" : {
        "public" : "public",
        "rewrites" : [{
            "source" : "/",
            "function" : "api"
        }]
    }
}

当我通过

在本地运行时
  

firebase提供--only功能

工作完美,但问题出在我尝试部署的地方 有想法吗?

1 个答案:

答案 0 :(得分:3)

有一些利基案例可以做到这一点。只要您必须执行此操作,便可以。记录在Serve Dynamic Content with Cloud Functions

基本上,您可以通过firebase.json在Firebase Hosting中配置重定向。如下所示:

return fetch(URL_LOCAL + `/addLike`, {
    method: 'post',
    body: JSON.stringify({a: 1})
})
    .then(response => Promise.resolve(response.json()))
    .catch(err => {
        return Promise.reject(err);
    })

然后,您在Firebase Functions中配置"rewrites": [ { "source": "/myapi", "function": "myapi" } ], 文件以在该路径上侦听HTTP请求,例如:

index.js