用于更具体描述的新内容
我正在尝试使用express和firebase函数进行高级路由。
但是当我尝试获取Firebase云功能时出现此错误
TypeError:无法在/Users/fredriccliver/Projects/firebase-test/functions/node_modules/express/lib/router/index.js:635:15下读取未定义的属性“ apply”(/ Users / fredriccliver /在Function.handle(/ Users / fredriccliver / Projects / firebase-test / functions / node_modules / express / lib / router /中的项目/firebase-test/functions/node_modules/express/lib/router/index.js:260:14) index.js:174:3)位于路由器(/Users/fredriccliver/Projects/firebase-test/functions/node_modules/express/lib/router/index.js:47:12)位于/ usr / local / lib / node_modules /在/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:568:19在/ usr /的Generator.next()处的firebase-tools / lib / emulator / functionsEmulatorRuntime.js:593:20 __awaiter处新Promise()处的local / lib / node_modules / firebase-tools / lib / emulator / functionsEmulatorRuntime.js:8:71(/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js: 4:12)
/functions/index.js
const functions = require("firebase-functions")
const admin = require("firebase-admin")
const cors = require("cors")
const express = require("express")
const apiRoute = require("./api")
// admin.initializeApp(functions.config().firebase)
const app = express()
app.use(cors)
app.use("/api", apiRoute)
exports.api = functions.https.onRequest(apiRoute)
/functions/api.js
const router = require("express").Router()
router.get("/data", (req, res) => {
res.send(`this is data`)
})
module.exports = router
有人可以给我一个解决这个问题的线索吗?
以前的内容
我正在尝试将我的node(带有express)项目转换为与Firebase兼容的项目。
我在以下位置添加我的API端点 /functions/index.js
const apiRoute = require("./routes/api")
exports.api = functions.https.onRequest(apiRoute)
在我的api.js中
router.get("/", (req, res) => {
res.send("api is running on")
})
router.get("/sentences", (req, res) => {
res.send("hi")
})
所以,我的期望是当我打电话给localhost:5000/api
或localhost:5000/api/sentences
时,我可以得到答复,但它不起作用。
为此,我尝试.onCall
提交了我的云函数,而不是使用.onRequest
。
但是当我致电functions.httpsCallable("endpoint")
时,仅接受POST请求。
因此,我尝试使用onRequest并在firebase.json托管中进行重写
"hosting": {
"public": "public",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/api/**",
"function": "api"
}
]
},
但是,我只是遇到了这个错误:
TypeError:无法在/Users/fredriccliver/Projects/Speech/functions/node_modules/express/lib/router/index.js:635:15下读取未定义的属性“应用”
我应该如何从前端javascript调用函数?
答案 0 :(得分:2)
您的路由应包含Firebase托管代理URI的完整路径。
router.get("/api", (req, res) => {
res.send("api is running on")
})
router.get("/api/sentences", (req, res) => {
res.send("hi")
})
我相信您也可以使用use()为应用程序中的每条路线指定一个通用前缀。
答案 1 :(得分:0)
检查了YouTube剪辑并尝试了更多内容后,我解决了问题。
总结在我的中等职位上。 Linear regression on raster images - lm complains about NAs
functions / index.js
const functions = require("firebase-functions")
const express = require("express")
const app = express()
// my routings
const apiRoute = require("./api")
// add routes to the express app.
app.use("/api", apiRoute)
exports.api = functions.https.onRequest(app)
functions / api.js
const router = require("express").Router()
router.get("/api/user/data", (req, res) => {
res.send(`this is /api/user/data`)
})
router.get("/api/data", (req, res) => {
res.send(`this is /api/data`)
})
router.get("/api/api", (req, res) => {
res.send(`here is /api/api`)
})
router.get("/api", (req, res) => {
res.send(`here is /api`)
})
router.get("/data", (req, res) => {
res.send(`here is /data`)
})
router.get("/", (req, res) => {
res.send(`here is /`)
})
module.exports = router
/firebase.json
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [{
"source": "/api/**",
"function": "api"
}]
}
}
所以,我可以接近所有端点