aaK*_*han 0 file-upload node.js express multer
我正在尝试使用 Multer 将文件保存到本地存储,我想要做的是根据 req.body 中的字段指定文件名。
基本上,文件名应该类似于contractorId-projctId。但 VS Code 显示了错误,即 body 属性未在 req 上定义,当我发送文件时,它会将其保存为 undefined-undefined.png。这是我的代码的屏幕截图。我添加此屏幕截图是为了强调 VS Code 对 req.body 的不满。
这是 uploadFiles.js 的代码
// @ts-check
import express from 'express';
import bodyParser from 'body-parser';
import router from './routes/router';
const app = express();
// Setting up middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ limit: '15mb' }));
// Setting up routes
app.use('/', router);
// Error handling
app.use('*', (req, res) => {
res.status(404).json({
code: 404,
error: 'Not found',
msg: "The resource you're looking for doesn't exist",
});
});
export default app;
Run Code Online (Sandbox Code Playgroud)
我在堆栈溢出中搜索了类似的问题,但最多的问题与文件上传有关。文件上传得很好,我通过向邮递员发送响应来测试 req.body 也很好。这是请求。
这是我在 router.js 中的代码。
// @ts-check
import Router from 'express';
import upload from '../configs/filesUploads';
const router = Router();
router.get('/', (req, res) => {
res.json({ Okay: true });
});
router.post('/uploads', (req, res) => {
upload(req, res, (err) => {
if (err) {
res.json({
error: err,
});
} else {
console.log(req.file);
res.json({ test: 'Meh', body: req.body });
}
});
});
export default router;
Run Code Online (Sandbox Code Playgroud)
这是app.js
// @ts-check
import express from 'express';
import bodyParser from 'body-parser';
import router from './routes/router';
const app = express();
// Setting up middleware
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ limit: '15mb' }));
// Setting up routes
app.use('/', router);
// Error handling
app.use('*', (req, res) => {
res.status(404).json({
code: 404,
error: 'Not found',
msg: "The resource you're looking for doesn't exist",
});
});
export default app;
Run Code Online (Sandbox Code Playgroud)