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

Javascript 如何在firebase上托管Nodejs/Express后端?,javascript,node.js,firebase,express,firebase-hosting,Javascript,Node.js,Firebase,Express,Firebase Hosting,我对NodeJs和Firebase很陌生。目前,我有一个带有Express和以下文件结构的NodeJs项目: ` + /root + /db - user.js + /domain - user.js + /node_modules - ... + /routes - routes.js - sever.js - config.json` 我想在Firebase上托管它,但它会为我添加ind

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

` + /root
    + /db
       - user.js
    + /domain
       - user.js
    + /node_modules
       - ...
    + /routes
       - routes.js
    - sever.js
    - config.json`
我想在Firebase上托管它,但它会为我添加index.html和其他文件。如果我尝试使用云函数,它会添加me/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);
和my routes.js代码:

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

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

{
    "hosting" : {
        "public" : "public",
        "rewrites" : [{
            "source" : "/",
            "function" : "api"
        }]
    }
}
当我通过本地

firebase仅提供功能

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

有几个小案例可以做到这一点。如果你必须这样做,这是可能的。记录在

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

"rewrites": [ {
  "source": "/myapi", "function": "myapi"
} ],
然后,在Firebase函数中配置
index.js
文件,以侦听该路径上的HTTP请求,如:

app.get("/myapi", (request, response) => {
  response.set("Cache-Control", "public, max-age=300, s-max-age=2629746");
  var myparam = request.query.item;
    return fetchSomethingFromFirestore(myparam).then((resp) => {
        return response.render("template", {
          myProperty: resp.valueForPugTemplate
        });
    });
});

app.use(function(err, req, res, next) {
  return errorhandler(err, req, res, next);
});

const myapi = functions.https.onRequest((request, response) => {
  if (!request.path) {
    request.url = `/${request.url}`;
  }
  return app(request, response);
});
module.exports = {
  myapi,
};

有一些特殊的案例可以做到这一点。如果你必须这样做,这是可能的。记录在

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

"rewrites": [ {
  "source": "/myapi", "function": "myapi"
} ],
然后,在Firebase函数中配置
index.js
文件,以侦听该路径上的HTTP请求,如:

app.get("/myapi", (request, response) => {
  response.set("Cache-Control", "public, max-age=300, s-max-age=2629746");
  var myparam = request.query.item;
    return fetchSomethingFromFirestore(myparam).then((resp) => {
        return response.render("template", {
          myProperty: resp.valueForPugTemplate
        });
    });
});

app.use(function(err, req, res, next) {
  return errorhandler(err, req, res, next);
});

const myapi = functions.https.onRequest((request, response) => {
  if (!request.path) {
    request.url = `/${request.url}`;
  }
  return app(request, response);
});
module.exports = {
  myapi,
};

我想我已经在firebase.json和index.js中这样做了。但是,当我运行“firebase deploy--only functions”时,我得到“../routes/routes.js”的缺少包错误。u
npm是否从functions目录中的终端安装了express-save
?另外,你需要在index.js脚本的顶部添加
命令,我想我已经在firebase.json和index.js中这样做了。但是,当我运行“firebase deploy--only functions”时,我得到“../routes/routes.js”的缺少包错误。u
npm是否从functions目录中的终端安装了express-save
?您还需要
在index.js脚本的顶部要求它