Express+MongoDB API如何将POST数据存入全局items数组并分阶段处理JSON
解决方案
实现需求只需要做两处核心修改,若需要服务启动时就同步数据库已有数据到数组可额外加初始化逻辑:
- 在全局作用域声明
items数组 - POST请求写入数据库成功后,将新生成的艺术家数据推入该数组
修改后的完整代码
const express = require('express') const MongoClient = require('mongodb').MongoClient const ObjectId = require('mongodb').ObjectId const app = express(); let db; // 新增全局items数组 let items = [] const port = process.env.PORT || 3015 app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.get('/', (req, res) => { res.send('Hey') }) app.get('/artists', (req, res) => { let count = 10 let page = 0 req.query.count ? count = req.query.count : null req.query.page ? (page = req.query.page * count, count = page + 5) : null; db.collection('artists').find().toArray((err, docs) => { if (err) { console.log(err) return res.sendStatus(500) } res.send(docs.slice(page, count)) }) }) app.post('/artists', (req, res) => { const artist = { name: req.body.name, photos: { small: null, large: null }, status: null, followed: false } db.collection('artists').insertOne(artist, (err, result) => { if (err) { console.log(err) return res.sendStatus(500) } // 新增:将新数据存入全局items数组 items.push(artist) res.send(artist) }) }) MongoClient.connect('***********', (err, client) => { if (err) { return console.log(err) } db = client.db('mongod'); // 可选:启动时同步数据库已有数据到items数组 db.collection('artists').find().toArray((err, docs) => { if (!err) items = docs }) app.listen(port, () => { console.log(`API is listening on port ${port}...`) }) })
注意事项
- 全局数组仅在服务运行期间有效,服务重启后数据会重置,初始化逻辑会重新从数据库拉取数据填充数组
- 如果后续新增了修改、删除艺术家的接口,需要同步修改
items数组内对应的数据,避免和数据库存储的数据不一致
内容的提问来源于stack exchange,提问作者Maaas
相关产品推荐
相关产品推荐

