在网站开发中,后端服务是非常重要的一部分。Express.js 是一个流行的 Node.js Web 框架,而 Firebase 提供实时数据库和身份验证服务。本教程将教你如何使用 Express.js 和 Firebase 构建实时后端服务。
准备工作
在开始之前,你需要安装 Node.js 和 Firebase。其中,Firebase 是基于 Google Cloud Platform 的一种云服务,提供实时数据库和身份验证服务。它非常易于使用,允许开发人员快速构建高性能的应用程序后端。
- 下载并安装 Node.js:https://nodejs.org/
- 创建一个 Firebase 账号,并在控制台中创建一个新项目:https://firebase.google.com/
- 安装 Firebase CLI:
npm install -g firebase-tools
- 在终端中登录 Firebase CLI:
firebase login
创建 Express.js 应用程序
我们将使用 Express.js 来构建后端服务。在命令行中,执行以下命令:
- 创建一个新目录:
mkdir my-express-app
- 进入该目录:
cd my-express-app
- 初始化 Node.js 项目:
npm init
- 安装 Express.js:
npm install express --save
- 创建
index.js
文件,并添加以下代码:
// javascriptcn.com 代码示例 const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`App listening on port ${port}!`); });
- 运行应用程序:
node index.js
- 在浏览器中访问
http://localhost:3000
,应该会看到Hello World!
的输出。
现在我们已经创建了一个最基本的 Express.js 应用程序。接下来,我们将使用 Firebase 实现实时后端服务。
集成 Firebase 实时数据库
Firebase 提供了实时数据库服务,允许我们实时同步数据。在 Firebase 控制台中,创建一个新的实时数据库,并从控制台中获得项目的凭据(Credentials)。
- 将 Firebase 密钥(Credentials)保存到本地,如
firebase-credentials.json
。 - 安装 Firebase Admin SDK:
npm install firebase-admin --save
- 创建
firebase.js
文件,并添加以下代码:
// javascriptcn.com 代码示例 const admin = require('firebase-admin'); const serviceAccount = require('./firebase-credentials.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: 'https://<my-project-id>.firebaseio.com' }); module.exports = admin.firestore();
将 <my-project-id>
替换为 Firebase 项目的 ID。
现在我们已经创建了一个 Firebase 实例。接下来,我们将使用实时数据库来替代 Express.js 应用程序的 /
端点。
// javascriptcn.com 代码示例 const express = require('express'); const firebase = require('./firebase'); const app = express(); app.get('/', (req, res) => { firebase.ref('messages/').once('value', snap => { let messages = snap.val(); if (!messages) messages = {}; res.send(JSON.stringify(messages)); }); }); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`App listening on port ${port}!`); });
现在,当你访问 http://localhost:3000
,应该会看到 messages
节点的结果输出。
推送新的数据
我们可以使用 Firebase 的 REST API 将新数据添加到实时数据库。因此,在客户端发送 HTTP POST 请求时,我们可以将请求体添加到数据库中。
// javascriptcn.com 代码示例 const express = require('express'); const bodyParser = require('body-parser'); const firebase = require('./firebase'); const app = express(); app.use(bodyParser.json()); app.post('/', (req, res) => { const ref = firebase.ref('messages/').push(); ref.set(req.body).then(() => { res.sendStatus(200); }); }); app.get('/', (req, res) => { firebase.ref('messages/').once('value', snap => { let messages = snap.val(); if (!messages) messages = {}; res.send(JSON.stringify(messages)); }); }); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`App listening on port ${port}!`); });
身份验证
现在我们已经实现了实时后端服务,但是任何人都可以通过 HTTP POST 请求向我们的数据库中添加数据。为了解决这个问题,我们可以使用 Firebase Authentication 来验证身份。
在控制台中启用身份验证,并添加一个用户。在客户端发送请求时,将 ID Token 添加到 HTTP 请求头中,然后在服务器端验证该 Token。
// javascriptcn.com 代码示例 const express = require('express'); const bodyParser = require('body-parser'); const firebase = require('./firebase'); const admin = require('./firebase-admin'); const app = express(); app.use(bodyParser.json()); app.post('/', (req, res) => { const idToken = req.headers.authorization.split('Bearer ')[1]; admin.auth().verifyIdToken(idToken) .then(decodedToken => { const userUid = decodedToken.uid; const ref = firebase.ref(`messages/${userUid}`).push(); ref.set(req.body).then(() => { res.sendStatus(200); }); }) .catch(err => { console.error(err); res.sendStatus(401); }); }); app.get('/', (req, res) => { const idToken = req.headers.authorization.split('Bearer ')[1]; admin.auth().verifyIdToken(idToken) .then(decodedToken => { const userUid = decodedToken.uid; firebase.ref(`messages/${userUid}`).once('value', snap => { let messages = snap.val(); if (!messages) messages = {}; res.send(JSON.stringify(messages)); }); }) .catch(err => { console.error(err); res.sendStatus(401); }); }); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`App listening on port ${port}!`); });
现在,只有已经登录的用户才能向实时数据库添加数据,并且只能查看他们自己发送的数据。
总结
本教程中,我们介绍了如何使用 Express.js 和 Firebase 构建实时后端服务。我们从最基本的 Express.js 应用程序开始,演示了如何使用 Firebase 实时数据库以及身份验证服务。在此基础上,你可以构建更高级的后端服务,例如使用 Firestore 和 Cloud Functions 进行更高级的数据处理和操作。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652cf60d7d4982a6ebe7955a