如何解决node.js中的“无法读取未定义的属性路径”(Multer)

时间:2020-10-05 05:04:03

标签: node.js mongodb express multer

我想使用multer将图像上传到mongodb。这是我的代码:

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./uploads");
  },
  filename: function (req, file, cb) {
    cb(
      null,
      file.fieldname + "-" + Date.now() + path.extname(file.originalname)
    );
  },
});

const upload = multer({
  storage: storage,
});

内部mongoClient:

client.connect((err) => {
const adminTasks = client
    .db(`${process.env.DB_NAME}`)
    .collection("adminTasks");

app.post("/uploadImage", upload.single("myImage"), (req, res) => {
    const img = fs.readFileSync(req.file.path);
    const encode_image = img.toString(base64);

    // defining json obj for image
    const final_image = {
      contentType: req.file.mimetype,
      path: req.file.path,
      image: new Buffer(encode_image, "base64"),
    };

    // inserting image to db
    userTasks.insertOne(final_image, (err, result) => {
      console.log(result);
      if (err) {
        console.log(err);
      }
      console.log("saved to db");
      res.contentType(final_image.contentType);
      res.send(final_image.image);
    });
  });
});

,错误是:

TypeError: Cannot read property 'path' of undefined

我已经阅读了许多有关由于enctype =“ multipart / form-data”而出现问题的问题。但是我用了这个:

<form action="http://localhost:5000/uploadImage" method="POST">
          <input type="file" enctype="multipart/form-data" name="myImage" />
          <input type="submit" value="upload Image" />
        </form>

如何解决此问题??

2 个答案:

答案 0 :(得分:0)

对于upload.single(),文件名位于req.file中。这是代表文件名的字符串。没有属性req.file.path。因此,您应该使用req.file来获取文件名。

答案 1 :(得分:0)

file.fieldname可能未定义。这就是为什么完整路径变得不确定的原因。

相反,请尝试在req.file中查找名称。这是对我有用的东西:

filename: (req, file, cb) => {
    cb(null, file.originalname)
}

文档以一般方式错误地指出了存储配置应包含的内容

filename: (req, file, cb) => {
    cb(null, file.fieldname)
}