Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB事务实现_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript MongoDB事务实现

Javascript MongoDB事务实现,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我得到的代码使用express和mongodb(mongoose)在db中存储喜欢的动画,用户可以喜欢/不喜欢动画,因此我需要实现事务: const express = require('express'); const router = express.Router(); const mongoose = require('mongoose'); const User = require('./login').User; mongoose.connect('mongodb://localho

我得到的代码使用expressmongodb(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

但是这些都不起作用

尝试在会话之外发送响应。在
等待session.commitTransaction()之后
也试着从这个问题中找出答案

不要在连接字符串中使用localhost或127.0.0.1作为主机名。如果使用Windows,请改用计算机名,并在末尾添加
?replicset=rs
rs
是副本集的名称

另外,不要忘记将
&retryWrites=false
添加到连接字符串中


使用
运行rs-v 4.0.0
启动副本集。

尝试在会话之外发送响应。在
等待session.commitTransaction()之后
也试着从这个问题中找出答案

不要在连接字符串中使用localhost或127.0.0.1作为主机名。如果使用Windows,请改用计算机名,并在末尾添加
?replicset=rs
rs
是副本集的名称

另外,不要忘记将
&retryWrites=false
添加到连接字符串中


使用
运行rs-v 4.0.0
启动副本集。

这是一个GET操作,为什么需要在那里执行事务?这是一个GET操作,为什么您需要在那里进行事务处理?我再次遇到此错误:``get/animation list/?username=marko 500 6.382 ms-21 MongoError:事务编号仅允许在副本集成员或mongos上使用``您是否连接到mongodb Atlas群集?我在本地主机上
mongoose.connect('mongodb://localhost:27017/animationsdb');我编辑了我的答案。在我上面发布的链接中似乎有一个很好的解决方案。我也尝试了你现在发布的解决方案,但它不适用于meI再次出现此错误:``get/animation list/?username=marko 500 6.382 ms-21 MongoError:事务号仅允许在副本集成员或mongos上使用``您是否连接到mongodb Atlas群集?我在本地主机上
mongoose.connect('mongodb://localhost:27017/animationsdb');我编辑了我的答案。在我上面发布的链接中似乎有一个很好的解决方案。我也尝试了你现在发布的解决方案,但它对我不起作用