介绍
在我的previous blog中,我们迈向了使用DataMotion's API的第一个API呼吁,以确保我们的安全消息中心。但是,随着我们添加更多功能和功能,事情很快就会纠结。现在,我们已经用最初的API呼叫弄湿了,现在该重组后端以确保使用最佳实践确保可伸缩性。
DataMotion's APIs提供了一种安全且合规的消息传递方法,非常适合需要可靠数据交换的应用程序。
为什么要组织?
结构合理的后端:
- ð§使找到特定功能或文件更容易。
- ð促进代码可重复使用性。
- ð加速功能开发,因为您知道一切都在哪里。
- ð有助于解决错误。
让我们开始!
后端目录结构
您的项目应遵循干净的结构,以确保清晰度。这是建议的设置:
server/
│
│── controllers/
│ ├── authController.js
│ └── messageController.js
│
│── routes/
│ ├── authRoutes.js
│ └── messageRoutes.js
│
│── utils/
│ └── getToken.js
│
│── .env
│── server.js
│── package.json
└── package-lock.json
让我们深入研究每个部分。
1.控制器(冷0)
控制器处理应用程序的核心逻辑,尤其是与外部服务有关。在我们的上下文中,这些文件负责与Datamotion的API进行交互,处理接收到的数据以及确定响应以发送给客户端。他们充当中介机构,确保我们的路线保持干净和专注,而与API相关的主要操作则是集中的。
authController.js
const axios = require('axios');
const getTokenUtil = require('../utils/getToken');
// Function to get a token from the DataMotion API
exports.getToken = async (req, res) => {
try {
const token = await getTokenUtil();
res.json(token);
} catch (error) {
res.status(500).json({ message: "Error fetching token", error: error.response.data });
}
};
messagesController.js
const axios = require('axios');
const getTokenUtil = require('../utils/getToken');
// Function to get message summaries from the DataMotion API
exports.getMessageSummaries = async (req, res) => {
try {
const token = await getTokenUtil();
const messagesResponse = await axios.get('https://api.datamotion.com/SMC/Messaging/v3/content/messages/?folderId=1&pageSize=10&pageNumber=1&sortDirection=DESC&metadata=true', {
headers: {
Authorization: `Bearer ${token.access_token}`
}
});
res.json(messagesResponse.data);
} catch (error) {
res.status(500).json({ message: "Error fetching messages", error: error.response.data });
}
};
2.路线(routes/
)
路由处理API端点。他们确定当命中特定API端点时调用哪个功能。
authRoutes.js
const express = require('express');
const router = express.Router();
const { getToken } = require('../controllers/authController');
// Endpoint to get token
router.get('/token', getToken);
module.exports = router;
messageRoutes.js
const express = require('express');
const router = express.Router();
const { getMessageSummaries } = require('../controllers/messageController');
// Endpoint to get message summaries
router.get('/', getMessageSummaries);
module.exports = router;
3.实用程序(utils/
)
在这里,我们存储可能在应用程序的不同部分重复使用的辅助功能或片段。
getToken.js
const axios = require('axios');
// Utility function to fetch the authentication token from the DataMotion API
const getTokenUtil = async () => {
try {
const response = await axios.post('https://api.datamotion.com/SMC/Messaging/v3/token', {
grant_type: "client_credentials",
client_id: process.env.CLIENT_ID,
client_secret: process.env.CLIENT_SECRET
});
return response.data;
} catch (error) {
throw error;
}
};
module.exports = getTokenUtil;
这一切的心:server.js
在有组织的后端,让我们看一下更新的server.js
:
const express = require('express');
const cors = require('cors');
require('dotenv').config();
const authRoutes = require('./routes/authRoutes');
const messageRoutes = require('./routes/messageRoutes');
const app = express();
const PORT = 5000;
// Middlewares
app.use(cors());
app.use(express.json());
// Route middlewares
app.use('/auth', authRoutes);
app.use('/messages', messageRoutes);
// Start the server
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
此文件现在充当中央集线器,整合了所有内容。使用此设置,将来添加更多路线,控制器或实用程序变得很简单。
到目前为止,您的消息中心的后端应整洁结构并准备好增长。在我们的下一篇文章中,我们将为安全消息中心添加更多功能,并观看我们结构化的后端薪资股息。请继续关注和愉快的编码!
您最近是否解决了重组应用程序的后端?在下面的评论中分享您的经验和技巧!