我正在创建一个在express
网络服务器上运行的节点应用程序,并使用express-session
和session-file-store
进行会话管理。
自从我将其包含在项目中以来,我的调试控制台就充满了诸如以下错误:
Error: EPERM: operation not permitted, rename 'd:\nodejs\project\sessions\924bcb22-dd42-47d1-a790-91ea14fe4cf1.json.3130939431' -> 'd:\nodejs\project\sessions\924bcb22-dd42-47d1-a790-91ea14fe4cf1.json'
不管出现什么错误,一切似乎都处于工作状态(会话在窗口/浏览器按预期关闭后仍然存在,依此类推),但是这些错误使得很难正确调试服务器的输出,因为它们不断重复。
我一直在寻找解决方案,尝试降级模块,通过Administrator PowerShell以管理员身份和独立应用程序的身份运行VS Code,检查文件夹上的文件权限,以便所有人和所有人都可以读取/写入,但错误仍然存在显示。此外,我在互联网上看到的许多类似错误都显示相同的错误,但session-file-store
一无所有,有些甚至根本不使用express
。
在有用的情况下,以下是app.js的摘要,它可能有助于解决此问题:
//...
const express = require('express');
const session = require('express-session');
const FileStore = require('session-file-store')(session);
const http = require('http');
const path = require('path');
const socketio = require('socket.io');
const bodyParser = require('body-parser');
const app = express();
const server = http.createServer(app);
global.io = socketio(server);
const port = process.env.PORT || 453;
//...
app.use(session({
genid: (req) => {
return global.uuid()
},
store: new FileStore(),
secret: 'NotReallyMySecretKey',
resave: false,
saveUninitialized: true
}))
请注意,我在此处也查看了很多答案,即使它们的名称相似,我也没有发现它们之间的相似之处,因此请在将问题标记为重复项之前进行检查
谢谢您的协助!
答案 0 :(得分:0)
我也遇到了同样的问题,我也浏览了SO和相关站点。在阅读并阅读文档后,我解决了这个问题。
对于我来说,共享静态文件时,它将初始化会话,并且由于某种原因,它将失败并导致该错误。我也遇到了无法写标题错误。
您必须在中间件堆栈的顶部保留静态文件的明确名称。它刚好在哈巴狗之下,然后才是其他一切。
示例-
/**
* Add views
*/
app.set("views",path.join(__dirname,"views"));
app.set("view engine","pug");
const myMiddlewares = [
//THIS HAS TO BE ON THE TOP.
express.static(path.join(__dirname, 'www')),
cookieParser("mySecret"),
session({
store: new fileStore(fileStoreOptions),
secret:"mySecret",
resave : true,
saveUninitialized: false
}),
bodyParser.urlencoded({ extended: true }),
bodyParser.json(),
upload.array(),
compression(),
passport.initialize(),
passport.session(),
flash()
];
app.use(myMiddlewares);
链接到文档 https://gist.github.com/joepie91/c0069ab0e0da40cc7b54b8c2203befe1