Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 对存储在数据库中的会话数据的混淆违反了REST原则_Javascript_Node.js_Mongodb_Rest_Express - Fatal编程技术网

Javascript 对存储在数据库中的会话数据的混淆违反了REST原则

Javascript 对存储在数据库中的会话数据的混淆违反了REST原则,javascript,node.js,mongodb,rest,express,Javascript,Node.js,Mongodb,Rest,Express,我正在写一篇关于我设计的一个应用程序的报告,其中包括我认为是后端的RESTAPI 应用程序授权用户从数据库请求资源的方式是使用会话cookie。我知道关于会话cookies服务器端是否违反REST有很多争论,但我没有发现任何具体的说明,说明我使用它们的方式违反了REST规则 我将节点Express框架与Express会话包一起使用。Cookie的创建和存储方式是通过一个中间件,该中间件使用connect mongodb session将会话数据保存到我的mongodb实例,如下所示: app.j

我正在写一篇关于我设计的一个应用程序的报告,其中包括我认为是后端的RESTAPI

应用程序授权用户从数据库请求资源的方式是使用会话cookie。我知道关于会话cookies服务器端是否违反REST有很多争论,但我没有发现任何具体的说明,说明我使用它们的方式违反了REST规则

我将节点
Express
框架与
Express会话
包一起使用。Cookie的创建和存储方式是通过一个中间件,该中间件使用
connect mongodb session
将会话数据保存到我的
mongodb
实例,如下所示:

app.js

//app.js导入开始
const mongoose=需要(“mongoose”);
const session=需要(“快速会话”);
const config=require(“配置”);
const MongoDBStore=require(“连接mongodb会话”)
//app.js导入结束
const mdbStore=新MongoDBStore({
uri:config.get(“mongoURI”),
mongooseConnection:mongoose.connection,
集合:“会话”,
ttl:config.get(“sessionLife”)/1000,
});
//会话中间件
应用程序使用(
会议({
name:config.get(“sessionName”),
genid:函数(){
返回uuid.v4();
},
秘密:config.get(“sessionKey”),
resave:false,
saveUninitialized:false,
曲奇:{
sameSite:没错,
httpOnly:true,
maxAge:config.get(“sessionLife”),
},
门店:MDB门店,
})
);
这意味着当客户端请求传入时,客户端的授权数据将通过
req.session
提供,但该数据来自我的数据库,而不是存储在服务器的任何位置

因此,这最终意味着我的服务器不直接存储任何用户数据,而是依赖于存储在数据库中的会话cookie的状态。这是否意味着API不是RESTful的


我通读了这篇SO文章,只发现了数据库中存储的Cookie的一小部分,但仍然非常感谢任何人的评论/澄清/批评。谢谢

这是基于前端的性质

如果您使用部署在公共商店中的移动应用程序,任何人都可以下载该应用程序并使用social ID自动注册,那么您的技术就不好

通常,对于企业移动应用程序,会话数据应该加密并在请求-响应中来回发送,并在移动代码中维护

如果这只是一个网页,其余的也可以在部署HTML的同一台服务器上使用,那么会话可以存储在DB中

如果其余部分在另一台计算机中分开,并且您通过内部ip/主机地址从前端服务器端代码调用它(该地址未公开),则您的逻辑不好

前端服务器端代码-意味着您可以拥有一台专门的服务器,负责react js的执行,该服务器不包含数据库访问代码-只提供AJAX服务,显然是REST,可能还有另一台服务器将再次接收另一个REST调用,该调用将与安装了MySQL或Oracle的另一台计算机进行通信

指1台web服务器、1台应用服务器和1台数据库服务器—类似于真实世界的企业应用程序


如果数据库未在同一台计算机中配置,则将会话存储在数据库中不是一个好主意,请在第一台计算机中创建一个缓存数据库服务器,如
redis
couchbase
,并将会话存储在那里,将业务数据库与您的UI逻辑和需求分开

前端是一个React/Redux构建,与
create React app
结合在一起,目前与移动设备无关。你能澄清最后一部分吗?你所说的前端服务器端代码是什么意思?是的,这基本上就是配置。react js execution使用
axios
与查询云数据库的restapi对话(
mongodb
)。你对我所做的有什么结论吗?我仍然不确定您是否在说我的实现不好?是的,如果没有在同一台计算机上配置DB,那么将会话存储在DB中不是一个好主意,在第一台计算机上创建一个缓存DB服务器,如redis或couchbase,并将会话存储在那里,将业务DB与您的UI逻辑和需求分开