【发布时间】:2020-12-30 16:49:38
【问题描述】:
我得到了这段代码,使用 express 和 mongodb(mongoose) 将喜欢的动画存储在 db 中,用户可以点赞/不喜欢动画,所以我需要实现事务:
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const User = require('./login').User;
mongoose.connect('mongodb://localhost:27017/animationsdb');
router.get('/', async(req, res) => {
// implement transaction
try {
const result = await User.findOne({ username: req.query.username });
if (result) {
console.log("Liked animations:", result.likedAnimations);
res.send({ animationList: result.likedAnimations });
} else {
console.log("no database result found");
res.sendStatus(404);
}
} catch (e) {
console.log(e);
res.sendStatus(500);
}
});
我需要帮助来实现交易,我尝试过这种方式:
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const User = require('./login').User;
mongoose.connect('mongodb://localhost:27017/animationsdb');
router.get('/', async(req, res) => {
// implement transactions
try {
const session = await mongoose.startSession();
session.startTransaction();
const result = await User.findOne({ username: req.query.username }).session(session);
if (result) {
console.log("Liked animations:", result.likedAnimations);
res.send({ animationList: result.likedAnimations });
} else {
console.log("no database result found");
res.sendStatus(404);
}
await session.commitTransaction();
session.endSession();
} catch (e) {
console.log(e);
res.sendStatus(500);
}
});
但它不起作用。
我还尝试在连接字符串中添加?replicaSet=rs 和?retryWrites=false 并安装
npm install run-rs -g
但都没有效果
【问题讨论】:
-
这是一个GET操作,为什么需要一个事务?
标签: javascript node.js mongodb express mongoose