程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用?

开发过程中遇到Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用的问题如何解决?下面主要结合日常开发的经验,给出你关于Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用的解决方法建议,希望对你解决Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用有所启发或帮助;

我正在尝试在 Firebase 上部署 Nuxt app 以利用 SSR。此应用使用 Nuxt server middleware 作为 API 端点(用于发送邮件)。

它在本地运行良好,但一旦部署,也无法模拟。当我尝试查询时收到 404 响应,但我不明白为什么。 是否有人已经使用 Nuxt 中间件在 Firebase 上创建了 API 端点?

注意:我分享的 repo 链接仅包含重现问题的最低限度(不是我的整个应用程序)。

nuxt.config.js

const webpack = require("webpack")
const { config } = require('dotenv')
config({ path: `../.env` })

module.exports = {
  mode: "universal",...
  modules: [
    "@nuxtJs/pwa",[
      "@nuxtJs/firebase",{
        config: { ... },services: {
          analytics: true,perfoRMANce: true,functions: true
        },onFirebaseHosTing: true,}
    ]
  ],buildModules: ["@nuxtJs/axios"],serverMIDdleware: ["./API/contact"],...
}

src/index.Js

const functions = require("firebase-functions")
const express = require("express")
const { Nuxt,Builder } = require("nuxt")
const cors = require('cors')
const app = express()

app.use(cors({ origin: true }))

const config = {
  dev: false,buildDir: ".nuxt",build: {
    publicPath: "/assets/"
  }
}
const nuxt = new Nuxt(config)

exports.nuxtapp = functions.https.onrequest(async (req,res) => {
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  } else {
    res.set("Cache-Control","public,max-age=300,s-maxage=600");
    await nuxt.ready()
  }
  app.use(nuxt.render)
  return app(req,res)
})

src/API/contact.Js

const express = require("express")

const app = express()
app.use(express.Json())

app.get("/",function (req,res) {
  res.status(405).Json({ error: "query invalID" });
})

app.post("/",res) {
  ...
})

module.exports = {
  path: "/API/contact",handler: app
}

调试日志

[deBUG] [2021-02-05T03:22:21.137Z] [functions] Got req.url=/nuxt-firebase-ssr-41d40/us-central1/nuxtapp/API/contact/,mapPing to path=/API/contact/ {"Metadata":{"emulator":{"name":"functions"},"message":"[functions] Got req.url=/nuxt-firebase-ssr-41d40/us-central1/nuxtapp/API/contact/,mapPing to path=/API/contact/"}}
[deBUG] [2021-02-05T03:22:21.158Z] [runtime-status] [22988] Ephemeral server handling POST request {"Metadata":{"emulator":{"name":"functions"},"function":{"name":"nuxtapp"},"message":"[runtime-status] [22988] Ephemeral server handling POST request"}}
[info] >  » Rendering url /API/contact/ {"user":"» Rendering url /API/contact/","Metadata":{"emulator":{"name":"functions"},"message":"\u001b[90m> \u001b[39m » Rendering url /API/contact/"}}
[deBUG] [2021-02-05T03:22:21.160Z] [runtime-status] [22988] Ephemeral server survived. {"Metadata":{"emulator":{"name":"functions"},"message":"[runtime-status] [22988] Ephemeral server survived."}}
[deBUG] [2021-02-05T03:22:21.192Z] <<< [APIv2][status] POST http://localhost:5001/nuxt-firebase-ssr-41d40/us-central1/nuxtapp/API/contact/ 404
[deBUG] [2021-02-05T03:22:21.193Z] <<< [APIv2][body] POST http://localhost:5001/nuxt-firebase-ssr-41d40/us-central1/nuxtapp/API/contact/ [stream]
[info] i  hosTing: 127.0.0.1 - - [05/Feb/2021:03:22:21 +0000] "POST /API/contact/ http/1.1" 404 - "http://localhost:5000/" "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/88.0.4324.104 Safari/537.36" {"Metadata":{"emulator":{"name":"hosTing"},"message":"127.0.0.1 - - [05/Feb/2021:03:22:21 +0000] \"POST /API/contact/ http/1.1\" 404 - \"http://localhost:5000/\" \"Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/88.0.4324.104 Safari/537.36\""}}
[info] i  functions: Finished "nuxtapp" in ~1s {"Metadata":{"emulator":{"name":"functions"},"message":"Finished \"nuxtapp\" in ~1s"

解决方法

我对 nuxt 不太熟悉,但看起来您没有将配置加载到您在 src/index.js 中创建的实例中。我认为应该是:

const config = require('./nuxt.config.js')
const nuxt = new Nuxt(config)

至少,您在 src/index.js 中的配置对象可能需要定义 serverMiddleware 属性。我很确定 new Nuxt() 不会自动加载 nuxt.config.js 文件。

大佬总结

以上是大佬教程为你收集整理的Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用全部内容,希望文章能够帮你解决Nuxt 服务器中间件在 Firebase Cloud Functions 上不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。