Mongodb 在Node/Express中同时处理客户端请求

Mongodb 在Node/Express中同时处理客户端请求,mongodb,express,Mongodb,Express,我想在我的express服务器中同时处理用户请求,并将来自这些请求的数据存储在Mongo db中。我已经准备好了所有的代码,但是,我正在努力找到一种方法,为每个用户请求分配一个唯一的id,这样我就可以将每个用户的数据保存到Mongo db 下面是我的代码示例 app.post("/page1", function(request,response) { var ipAddress = request.connection.remoteAddress;

我想在我的express服务器中同时处理用户请求,并将来自这些请求的数据存储在Mongo db中。我已经准备好了所有的代码,但是,我正在努力找到一种方法,为每个用户请求分配一个唯一的id,这样我就可以将每个用户的数据保存到Mongo db

下面是我的代码示例

app.post("/page1", function(request,response) {    

    var ipAddress = request.connection.remoteAddress;
    var name1 = request.body.name1;

    MongooseModel.findOneAndUpdate({id: ipAddress},{name1:name1},
        {upsert: false}, function() {});

    response.redirect('/page2');
});
正如您所看到的,我试图根据每个客户端的IP地址来区分它们。然后,在上面发布的代码之后直接运行以下代码

app.post("/page2", function(request,response) {    

    var ipAddress = request.connection.remoteAddress;
    var name2 = request.body.name2;

    MongooseModel.findOneAndUpdate({id: ipAddress},{name2:name2},
        {upsert: false}, function() {});

    response.redirect('/page3');
});
我再次尝试根据每个客户端请求的IP地址来区分它们。不幸的是,我上面的代码只有在两个(或更多)客户端不共享同一网络连接时才起作用。如果它们返回相同的值,request.connection.remoteAddress将返回相同的值,并且我的数据库将被混淆


这个问题有聪明的解决办法吗?我知道,大多数网站(如amazon.com)都必须克服这个问题,因为它们接收到数以百万计的客户请求,并且必须区分所有这些请求,以便在数据库中存储数据。

识别客户的最可靠方法是登录,然后通过用户ID识别客户(在他们创建帐户时定义为唯一,然后在用户登录时由用户指定)。您可以通过会话cookie跟踪登录状态。类似express session的功能通常用于自动创建此cookie,并为您提供在会话中存储临时状态的位置。如果随后在其上添加用户登录,则其优点是可以跨计算机跨时间识别同一用户

passport之类的库甚至可以让您利用其他服务(如Google、Facebook、Twitter等)的登录,而不是让用户创建自己的新登录到您的服务

跟踪特定用户的一种更为临时的方法是设置一个具有唯一ID的cookie,然后将该cookie用作用户标识符。由于该cookie将与来自该特定设备的任何未来请求一起显示,因此您可以将其用作用户的短期代理。但是,这仅适用于短期标识n因为cookie可以被删除,所以它们与特定设备相关,而不是特定用户,并且不能跨设备工作

正如您已经发现的,IP地址对于用户来说是一个糟糕的代理,因为许多用户可以共享相同的IP地址(通过家庭、公司和移动网关)。随着移动用户在网络上的移动,同一设备的IP地址可能会发生变化

我知道大多数网站(如amazon.com)都必须克服这个问题,因为它们接收到数以百万计的客户端请求,并且必须区分所有这些请求,以便在其数据库中存储数据


如果他们将用户数据长期存储在数据库中,那么他们将使用用户登录和持久cookie来识别用户,并将数据存储在数据库中,以获取cookie指示的特定用户ID。注意,用户ID通常不直接存储在cookie中,以防止欺骗用户,而是存储在其他一些特定的cookie中引用是在cookie中,他们可以查找并转换为用户ID,然后可以使用该用户ID在数据库中作为密钥来存储特定用户的资料。

感谢您提供的有用答案。我只需要一种临时方法来跟踪每个客户机(仅当他们使用应用程序时,应该只有30分钟左右),因此cookie似乎是一个不错的选择。我的理解是cookie是从服务器发送到客户端的。您似乎在说cookie可以从客户端发送到服务器。是否有一种方法用于识别用户cookie的请求参数(例如request.cookie)?@duplek-Cookie通常由服务器通过使用响应上的
SET Cookie
头将其附加到对客户端请求的响应来设置。协作客户端(如浏览器)然后接收并存储这些Cookie。在将来向该服务器发出的任何请求中,它们会使用
Cookie
头将相同的Cookie与这些请求一起发送回。因此,服务器将接收来自合作客户端的所有未来请求中以前设置的Cookie,直到Cookie过期或被删除。请记住,Cookie只发送回它们最初来自的服务器。@duplek-有一个简单的示例,说明cookies由服务器设置,然后由客户端发送回。感谢您的澄清,该链接也很有用!我现在要花一些时间研究在Node中实现HTTP cookies,似乎有很多很好的资源谢谢你的指导!