node.js - 如何用express导出不同的功能
问题描述
我将此代码用于托管在 Google Cloud Repository 中的存储库。
我将此代码用于 Google Cloud Functions 的某些功能。
我想为不同的功能使用相同的存储库。我希望这是可能的:
功能1(账户):
- 帐户/用户
- 帐户/用户/:用户 ID
功能2(信息):
- 信息/评论
- info/comments/:commentId
这是我的代码:
const express = require('express');
const cors = require('cors');
const account = express();
const info = express();
account.use(cors({
origin: '*'
}));
info.use(cors({
origin: '*'
}));
const PORT = 5555;
const PORT2 = 5556;
const USERS = [
{
id: 1,
firstName: 'John',
lastName: 'Smith'
},
{
id: 2,
firstName: 'Jane',
lastName: 'Williams'
}
];
const COMMENTS = [
{
id: 1,
firstName: 'John',
lastName: 'Smith'
},
{
id: 2,
firstName: 'Jane',
lastName: 'Williams'
}
];
account.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
account.get('/users', (req, res, next) => {
res.json(USERS);
});
account.get('/users/:userId', (req, res, next) => {
res.json(USERS.find(user => user.id === parseInt(req.params.userId)));
});
info.listen(PORT2, () => {
console.log(`Server running on port ${PORT}`);
});
info.get('/comments', (req, res, next) => {
res.json(COMMENTS);
});
info.get('/comments/:commentId', (req, res, next) => {
res.json(COMMENTS.find(comment => comment.id === parseInt(req.params.commentId)));
});
module.exports = {
account,
info
};
有了这个,我可以使用相同的 repo部署不同的功能帐户和信息。但我不想实例化两个我认为是不好的做法的 express 对象。
我需要为不同的 Google Cloud Functions 导出两个函数。我怎样才能做到这一点?
解决方案
最好组织你的代码。创建包含以下代码的 app.js 文件。使用一个端口。
const express = require('express');
const cors = require('cors');
const app = express();
const users = require('./users');
const comments = require('./comments');
app.use(cors({
origin: '*'
}));
app.use('/users', users);
app.use('/comments', comments);
const PORT = 5555;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
/// place this in users.js
const express = require('express');
const account = express.router;
account.get('/', (req, res, next) => {
res.json(USERS);
});
account.get('/:userId', (req, res, next) => {
res.json(USERS.find(user => user.id === parseInt(req.params.userId)));
});
module.exports = account;
// place in comments.js
const express = require('express');
const info= express.router;
const COMMENTS = [
{
id: 1,
firstName: 'John',
lastName: 'Smith'
},
{
id: 2,
firstName: 'Jane',
lastName: 'Williams'
}
];
info.get('/', (req, res, next) => {
res.json(COMMENTS);
});
info.get('/:commentId', (req, res, next) => {
res.json(COMMENTS.find(comment => comment.id === parseInt(req.params.commentId)));
});
module.exports = info;
推荐阅读
- react-native - 反应原生:ScrollView / FlatList / SectionList 需要双击?
- r - 根据变量的第 n 次出现创建一个列表。谢谢
- typescript - 将变量设置为 iframe 内的活动元素
- python - Python - 计算 IP 范围内 IP 的最佳方法
- php - 检查具体情况
- kubernetes - 无法为 volumeMount 准备 subPath
- android - 检测用户静音振铃信号
- excel - 无法以编程方式添加第二个用户按钮
- database - 使用 InfluxDB 存储事件数据
- python - 使用递归在列表列表中查找元素