抱歉,回答不好。这是我的第一次。我正在寻找更可爱的代码,但发现没有回答你的问题。
我不知道正确的行话。然而,您还没有使用自定义服务器运行您的应用程序。至少这就是我使用 firebase-admin 所做的事情。请注意,我的答案很糟糕,因为我通过 socket.io 与我的客户进行了交流。我只将 firebase 用于客户端代码和身份验证
在 package.json 中,您将脚本标签添加到命令行中
{
"scripts:
"server": "node server.js"
}
这样你就可以运行了
$ npm run server
从命令行
~/package.json
{
"name": "app",
"version": "0.1.0",
"private": true,
"scripts": {
"server": "node server.js",
"dev": "next dev",
"build": "next build",
"start": "next start"
},
"dependencies": {
"next": "9.3.1",
"react": "16.13.1",
"react-dom": "16.13.1"
}
}
在 server.js 文件中,您加载 express 以进行服务器端渲染,可能可以通过另一个帖子启动您自己的 http 服务器。但是,如下所示,我实际使用的是 socket.io,因此它具有该连接详细信息
关键就在这里
他 nextHandler() 将服务器的控制权传递给下一个。所以你可能可以启动一个http服务器并使用nextHandler()
app.get('*', (req, res) => {
return nextHandler(req, res)
})
~/server.js
const fs = require('fs');
const express = require('express');
const app = express();
const server = require('http').Server(app)
const firebaseAdmin = require('./services/dwf.firebase.admin.js');
const secureServer = require('https').createServer({
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
}, app)
const io = require('socket.io')(secureServer, {secure: true})
const User = require('../../users/user.manager.js');
let user = User(io,firebaseAdmin.auth(),firebaseAdmin.database());
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const nextApp = next({dev})
const nextHandler = nextApp.getRequestHandler()
// socket.io server
io.on('connection', socket => {
console.log(`Main Socket Opened by:\n ${socket.id}`);
socket.on('getDb',function(userId,refs,fn){
console.log("Getting Data")
firebaseAdmin.database().ref(refs).once('value',(snapshot)=>{
console.log(snapshot.val());
fn({body: snapshot.val()})
socket.emit('getDb',snapshot.val());
});
})
socket.on('disconnect', () => {
console.log(`Main Socket Closed by:\n ${socket.id}`);
});
})
nextApp
.prepare()
.then(() => {
app.get('/data/messages', (req, res) => {
res.json(messages)
})
app.get('*', (req, res) => {
return nextHandler(req, res)
})
secureServer.listen(PORT, () => console.log('#> Main Server ready for clients on https://0.0.0.0:PORT'));
})