小编Con*_*nor的帖子

Mongoose - 如果不存在则创建文档,否则,在任何一种情况下都更新 - 返回文档

我正在寻找一种方法来重构我的部分代码,使其更短更简单,但我不太了解Mongoose,我不知道如何继续.

我正在尝试检查一个集合是否存在文档,如果它不存在,则创建它.如果确实存在,我需要更新它.在任何一种情况下,我都需要访问文档的内容.

到目前为止我设法做的是查询特定文档的集合,如果找不到,则创建一个新文档.如果找到它,我会更新它(当前使用日期作为虚拟数据).从那里我可以访问我的初始find操作中找到的文档或新保存的文档,这可行,但必须有一个更好的方法来完成我所追求的.

这是我的工作代码,没有分散注意力.

var query = Model.find({
    /* query */
}).lean().limit(1);

// Find the document
query.exec(function(error, result) {
    if (error) { throw error; }
    // If the document doesn't exist
    if (!result.length) {
        // Create a new one
        var model = new Model(); //use the defaults in the schema
        model.save(function(error) {
            if (error) { throw error; }
            // do something with the document here
        });
    }
    // If the document does exist
    else {
        // Update it …
Run Code Online (Sandbox Code Playgroud)

javascript refactoring mongoose node.js

50
推荐指数
2
解决办法
5万
查看次数

Socket.IO - 中间件和范围:我应该如何从外部中间件访问全局IO对象?

我已经将Socket.IO应用程序的某些部分拆分为各种中间件,这些中间件执行应用程序所需的操作,如管理会话和实施访问限制.

我目前正在尝试编写另一组中间件函数来处理当前连接的套接字列表,这些套接字旨在用于从服务器中踢出特定客户端,我发现自己需要iosocket.on事件回调到广播的上下文中使用全局对象通过io.sockets.in('room')发送到特定房间的消息.semit(...).

据我所知,如果你将套接字事件从主程序中分离出来,我的方式就是没有一种方法来访问io外部文件中的全局对象.仅仅require是外部文件中的Socket.IO模块是不够的.

我已经提出了这个解决方法来注入全局io对象并返回一个与签名Socket.IO期望从中间件匹配函数,它似乎工作.不过,我担心.

对我的问题有更优雅的解决方案吗?也许更清洁的选择?我错过了文档中的内容吗?

我找到的"解决方案"有没有隐藏的问题?

index.js

// Other required stuff- Express.js, Mongoose, whatever.
var io = require('socket.io').listen(server);

var Middleware = require('./middleware.js')(io);
io.use(Middleware);

server.listen(port);
Run Code Online (Sandbox Code Playgroud)

middleware.js

module.exports = function(io) {
    return function(socket, next) {
        socket.on('kickUser', function(data) {
            // Do something with the global io object here.
        });
        return next();
    };
};
Run Code Online (Sandbox Code Playgroud)

任何的建议都受欢迎!

javascript node.js socket.io

4
推荐指数
1
解决办法
847
查看次数

标签 统计

javascript ×2

node.js ×2

mongoose ×1

refactoring ×1

socket.io ×1