我正在使用MERN和multer发布并获取图像和数据。我在Postman中完成此操作没有任何问题,但是当我运行代码时,它将编译以下错误:
TypeError: Cannot read property 'path' of undefined
at router.post (...routes\property.js:42:34)
代码:
router.post('/add', upload.single('propertyImage'), (req, res, next) => {
console.log(req.file)
const propertyImage = req.file.path;
我假设我的req
电话打错了吗?我试图将req
更改为req.file
和req.body.propertyImage
,但这会导致完全不同的错误或相同的错误。
我在这里想念什么?
答案 0 :(得分:1)
您需要添加
enctype = "multipart/form-data"
在HTML的表单标签中
类似
form(method='POST', action='/add', enctype = "multipart/form-data")
参考:https://www.npmjs.com/package/multer(请参阅基本用法)
答案 1 :(得分:0)
错误:
from scipy.stats import levene
import numpy as np
Experiment1 = np.array([1.595440,1.419730,0.000000,0.000000])
Experiment2 = np.array([1.433800,2.079700,0.892139,2.384740])
Experiment3 = np.array([0.036930,0.938018,0.995956,1.006970])
levene(Experiment1 ,Experiment2,Experiment3)
LeveneResult(statistic=2.6741725711150446, pvalue=0.12259792666001798)
表示服务器无法解码任何文件。您必须确保两件事:
您确实正确上传了文件
您在Express中使用了正确的中间件来解码文件
让我们深入其中。
部分1(客户端)-确保正确使用上传文件。假设您使用TypeError: Cannot read property 'path' of undefined
at router.post (...routes\property.js:42:34)
,那么文件输入也必须命名为upload.single('propertyImage')
,以便Multer知道如何解码propertyImage
请求并将文件与其余输入分开,因为文件和输入以特殊方式合并,只有像Multer这样的特殊解码器才能提取。
您可以使用multipart/form-data
内容类型。 Axios示例:
multipart/form-data
PART 2(服务器)-使用解码器来解析输入:
var payload = {
input1: 'value1',
propertyImage: file, // file must be a file object
};
var formData = new FormData();
for (let key in payload ) {
formData.append(key, payload[key]);
}
axios({
method: 'post',
url: '/add',
headers: {
'Content-Type': 'multipart/form-data',
},
data: formData,
})
检查您的Multer设置:
const app = express();
// Middlewares
...
app.use(express.json());
app.use(express.urlencoded({ extended: false }));// put true for nested objects/arrays inputs
...
现在,您应该可以将文件获取为:
const multer = require('multer');
const port = process.env.APP_PORT || 3500;
const entityStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'public/images');// check for correct permission
},
filename: (req, file, cb) => {
const name = 'file-' + Date.now() + '-' + file.originalname;
cb(null, name);
}
});
const upload = multer({storage: entityStorage});