Sails.js 修改Sails中的路由以使用id以外的内容?

Sails.js 修改Sails中的路由以使用id以外的内容?,sails.js,Sails.js,我有一个web应用程序,它通过一个套接字与我的后端节点.js+sails应用程序通信 套接字的默认路由使用id。作为示例 io.socket.get('/chatroom/5') 我的应用程序不会对用户进行身份验证,因此我希望id是随机的,所以没人能猜出来。然而,id是由mongoDB生成的,并不是随机的 因此,我想使用一些其他字段(例如“randomId”),并更新此模型的路由以使用此字段而不是id 最好的方法是什么 另外,看起来我必须使用策略,但仍在努力弄清楚我到底应该做什么。你不会被迫在

我有一个web应用程序,它通过一个套接字与我的后端节点.js+sails应用程序通信

套接字的默认路由使用id。作为示例

io.socket.get('/chatroom/5')
我的应用程序不会对用户进行身份验证,因此我希望id是随机的,所以没人能猜出来。然而,id是由mongoDB生成的,并不是随机的

因此,我想使用一些其他字段(例如“randomId”),并更新此模型的路由以使用此字段而不是id

最好的方法是什么


另外,看起来我必须使用策略,但仍在努力弄清楚我到底应该做什么。

你不会被迫在应用程序中使用默认的蓝图路由;您始终可以使用自定义控制器方法或进行重写

GET/chatroom/:id
方法自动路由到您的ChatroomController.js文件的
find
操作。如果没有自定义操作,则使用blueprint操作。因此,在您的例子中,您可以在ChatroomController.js中定义如下内容:

find: function (req, res) {

    // Get the id parameter from the route
    var id = req.param('id');

    // Use it to look up a different field
    Chatroom.find({randomId: id}).exec(function(err, chatrooms) {
        if (err) {return res.serverError(err);}

        // Subscribe to these rooms (optional)
        Chatroom.subscribe(req, chatrooms);

        // Return the room records
        return res.json(chatrooms);

    });

}
"GET /chatroom/:randomid": "ChatroomController.myFindActionName"
如果您不喜欢名称
find
或参数
id
,您可以在config/routes.js中设置自己的路由:

find: function (req, res) {

    // Get the id parameter from the route
    var id = req.param('id');

    // Use it to look up a different field
    Chatroom.find({randomId: id}).exec(function(err, chatrooms) {
        if (err) {return res.serverError(err);}

        // Subscribe to these rooms (optional)
        Chatroom.subscribe(req, chatrooms);

        // Return the room records
        return res.json(chatrooms);

    });

}
"GET /chatroom/:randomid": "ChatroomController.myFindActionName"
此外,关于:

套接字的默认路由使用id


这些路由不仅仅针对套接字——它们还响应常规HTTP请求

我创建了一个策略。此策略将randomId(作为:id传递)转换为实id,并将其保存在req.options.id(Sails将拾取)中

我将此策略应用于我的控制器的findOne和update操作:

ChatRoomController: {
    findOne : 'useRandomId',
    update : 'useRandomId'
}

我在想。然而,这样看来,我丢失了很多Sails免费提供的东西(订阅、协会订阅等等)。事实上,我担心的一件事是,我失去了一些我甚至没有意识到的东西(它会在以后咬我)。我把我自己的答案和我提出的解决方案加在一起