上传已存在的文件导致页面刷新
Uploading file that already exists is causing page to refresh
我有个问题找了很久都找不到解决办法。
它仅在上传已存在于上传文件夹中的文件(同名文件)时发生。如果我第一次上传文件,它工作正常。我正在使用 express-fileupload 包。
我用这段代码作为参考https://github.com/bradtraversy/react_file_uploader
在我添加文件上传之前,我的表单工作正常,首先我认为它的前端出了问题,我使用 React 并认为有一些状态正在改变并导致页面重新加载,但后来我使用了邮递员,它仍然会重新加载我的应用程序,无论我在哪个页面上,即使我注销并使用邮递员上传文件,它也会重新加载页面,但前提是文件已经上传。这不会发生在上面的代码中。
这是我的代码的样子
controller/upload.js
exports.upload_file = (req, res) => {
if (req.files !== null) {
const file = req.files.atest;
file.mv(`${process.cwd()}/client/public/atesti/${file.name}`, err => {
if (err) {
return res.status(500).json({ ok: false, message: "Unos nije snimljen - greška kod atesta" });
}
res.status(200).json({ ok: true, message: "Atest je snimljen" });
});
} else return res.status(400).json({ ok: false, message: "Unos nije snimljen - fajl nije snimljen" });
}
routes/upload.js
const express = require('express');
const router = express.Router();
const uploadControlled = require('../controller/upload');
const routeAuth = require('../auth/auth');
router.post('/', routeAuth, uploadControlled.upload_file);
module.exports = router;
server.js
const express = require('express');
const cookieParser = require('cookie-parser');
const fileUpload = require('express-fileupload');
const app = express();
app.use(cookieParser());
app.use(fileUpload());
const PORT = process.env.PORT || 5000;
app.use(express.json());
//Stop CORS errors
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Authorization');
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
return res.status(200).json({});
}
next();
});
const lagerListaRoute = require('./api/routes/items');
const korisniciRoute = require('./api/routes/users');
const refreshTokenRoute = require('./api/routes/refreshToken');
const seceneCeviRoute = require('./api/routes/seceneCevi');
const rezervacijeRoute = require('./api/routes/rezervacije');
const uploadRoute = require('./api/routes/upload');
const searchRoute = require('./api/routes/search');
app.use('/lagerlista', lagerListaRoute);
app.use('/users', korisniciRoute);
app.use('/refreshToken', refreshTokenRoute);
app.use('/seceneCevi', seceneCeviRoute);
app.use('/rezervacije', rezervacijeRoute);
app.use('/upload', uploadRoute);
app.use('/search', searchRoute);
app.use((req, res, next) => {
const error = new Error('Not found');
error.status = 404;
next(error);
});
app.use((error, req, res, next) => {
res.status(error.status || 500);
res.json({
error: {
message: error.message
}
});
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
我尝试在 server.js 中添加所有内容,就像在示例代码中一样,没有将其拆分到控制器和路由文件夹中,也没有进行身份验证,但它仍然重新加载了页面。
如果有人想知道为什么我多次上传同一个文件,有时我需要更改上传的文件但保留相同的名称,并且在我的应用程序中文件连接到一个项目,有时文件共享给项目很少,所以当我需要将同一个文件与不同的项目连接时,我使用相同的文件上传。上传文件时,我使用它的位置并将其保存在数据库中。
经过几天的 bug 搜索,我找到了修复方法。看起来 react-scripts 有问题,我安装了 3.4.0 版,但是当我将它降级到 3.0.1 时,上传开始正常工作,3.1.0 版也可以正常工作。当我创建构建文件夹时上传正常,然后反应脚本的版本无关紧要。
我有个问题找了很久都找不到解决办法。 它仅在上传已存在于上传文件夹中的文件(同名文件)时发生。如果我第一次上传文件,它工作正常。我正在使用 express-fileupload 包。
我用这段代码作为参考https://github.com/bradtraversy/react_file_uploader
在我添加文件上传之前,我的表单工作正常,首先我认为它的前端出了问题,我使用 React 并认为有一些状态正在改变并导致页面重新加载,但后来我使用了邮递员,它仍然会重新加载我的应用程序,无论我在哪个页面上,即使我注销并使用邮递员上传文件,它也会重新加载页面,但前提是文件已经上传。这不会发生在上面的代码中。
这是我的代码的样子
controller/upload.js
exports.upload_file = (req, res) => {
if (req.files !== null) {
const file = req.files.atest;
file.mv(`${process.cwd()}/client/public/atesti/${file.name}`, err => {
if (err) {
return res.status(500).json({ ok: false, message: "Unos nije snimljen - greška kod atesta" });
}
res.status(200).json({ ok: true, message: "Atest je snimljen" });
});
} else return res.status(400).json({ ok: false, message: "Unos nije snimljen - fajl nije snimljen" });
}
routes/upload.js
const express = require('express');
const router = express.Router();
const uploadControlled = require('../controller/upload');
const routeAuth = require('../auth/auth');
router.post('/', routeAuth, uploadControlled.upload_file);
module.exports = router;
server.js
const express = require('express');
const cookieParser = require('cookie-parser');
const fileUpload = require('express-fileupload');
const app = express();
app.use(cookieParser());
app.use(fileUpload());
const PORT = process.env.PORT || 5000;
app.use(express.json());
//Stop CORS errors
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Authorization');
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
return res.status(200).json({});
}
next();
});
const lagerListaRoute = require('./api/routes/items');
const korisniciRoute = require('./api/routes/users');
const refreshTokenRoute = require('./api/routes/refreshToken');
const seceneCeviRoute = require('./api/routes/seceneCevi');
const rezervacijeRoute = require('./api/routes/rezervacije');
const uploadRoute = require('./api/routes/upload');
const searchRoute = require('./api/routes/search');
app.use('/lagerlista', lagerListaRoute);
app.use('/users', korisniciRoute);
app.use('/refreshToken', refreshTokenRoute);
app.use('/seceneCevi', seceneCeviRoute);
app.use('/rezervacije', rezervacijeRoute);
app.use('/upload', uploadRoute);
app.use('/search', searchRoute);
app.use((req, res, next) => {
const error = new Error('Not found');
error.status = 404;
next(error);
});
app.use((error, req, res, next) => {
res.status(error.status || 500);
res.json({
error: {
message: error.message
}
});
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
我尝试在 server.js 中添加所有内容,就像在示例代码中一样,没有将其拆分到控制器和路由文件夹中,也没有进行身份验证,但它仍然重新加载了页面。
如果有人想知道为什么我多次上传同一个文件,有时我需要更改上传的文件但保留相同的名称,并且在我的应用程序中文件连接到一个项目,有时文件共享给项目很少,所以当我需要将同一个文件与不同的项目连接时,我使用相同的文件上传。上传文件时,我使用它的位置并将其保存在数据库中。
经过几天的 bug 搜索,我找到了修复方法。看起来 react-scripts 有问题,我安装了 3.4.0 版,但是当我将它降级到 3.0.1 时,上传开始正常工作,3.1.0 版也可以正常工作。当我创建构建文件夹时上传正常,然后反应脚本的版本无关紧要。