为什么MongoDB在路径中添加额外的斜杠?

时间:2019-10-21 17:16:04

标签: node.js mongodb express mongoose

大家晚上好,我难以将URL保存为mongodb数据库。因为mongo在网址的每个部分都添加了额外的斜杠。像这样: “ localhost:3333 \ uploads \ Untitled1.cpp” 但在我的控制台日志中,我得到了正常结果(请看屏幕快照中的终端)。怎么了请帮助

let storage = multer.diskStorage({
    destination: (req, file, cb) =>{
        cb(null, '/uploads')
    },
    filename: (req, file, cb) => {
        cb(null, file.originalname)
    }
})

let upload = multer({ storage: storage })
let type = upload.single('myFile');

app.post('/upload', type, (req, res) => {
    const url = `http://localhost:3333${req.file.path}`;
    const image = {
        name: req.file.originalname,
        url: url
    }
    console.log(image.url)
    const newImage = new Image(image);
    newImage.save()
        .then (res.json('Картинку додано'))
        .catch(err => res.status(400).json(err));
});

console.log result in terminal

2 个答案:

答案 0 :(得分:1)

我假设您使用的Windows操作系统在文件系统中的路径使用反斜杠“ \”。 Web(和基于Linux的操作系统)对路径使用正斜杠“ /”。因此,我猜$ {req.file.path}是指您计算机上的文件,它正在返回包含反斜杠的路径。

您可以将String.replace()与正则表达式一起使用,以将正斜杠替换为反斜杠:

let webPath = req.file.path.replace(/\\/g,'/'))
const url = `http://localhost:3333${webPath}`;

答案 1 :(得分:0)

我找到了解决方案。您需要做的是在将文件发布/保存到数据库中时,需要使用替换功能,然后将路径以正斜杠保存到数据库中。

以下是代码段:

app.post('/upload', upload.single('file'), (req, res, next) => {
  const file = new Cluster1({
    filePath: req.file.path.replace(/\\/g, '/'),
    name: req.file.originalname
  });
  file.save()

您可以看到我如何使用替换功能来避免\\\