You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sails.js无法删除记录及关联上传文件问题求助

问题分析与修复方案

先帮你梳理代码里的几个关键问题,这些大概率就是导致删除失败的原因:

1. 文件路径拼接错误

你当前的文件路径写法会导致路径格式异常:

fs.unlink("./assets/video"+video, function(err1){...})

比如video值是test.mp4的话,最终路径会变成./assets/videotest.mp4,系统根本找不到对应文件。要在video前加上斜杠,或者用更可靠的path模块拼接:

// 手动补全斜杠的写法
fs.unlink("./assets/video/"+video, function(err1){...})

// 更推荐的path模块写法(需先引入const path = require('path'))
fs.unlink(path.join(__dirname, '../assets/video', video), function(err1){...})

2. 错误处理变量混淆

在文件删除的回调里,你打印的是数据库删除的错误err,而不是文件删除的真实错误err1:

if(err1){ console.log(err); }

这会让你看不到文件删除环节的真实报错,改成:

if(err1){ console.log('文件删除失败:', err1); }

3. 逻辑顺序不合理

你现在不管数据库删除成功与否,都会执行文件删除操作,很容易造成数据不一致(比如数据库删失败了,但文件被删掉了)。应该把文件删除逻辑放在数据库删除成功的分支里:

Kue_screen.destroy({id:req.param('id')}).exec(function(err){
  if(err){
    console.log('数据库删除失败:', err);
    req.addFlash('error', '删除失败,请重试');
    return res.redirect('/setting/choose');
  }
  // 数据库删除成功后再执行文件删除
  fs.unlink("./assets/video/"+video, function(err1){
    if(err1){
      console.log('文件删除失败:', err1);
      req.addFlash('warning', '数据库记录已删除,但关联文件删除失败');
    } else {
      req.addFlash('success', 'video has been deleted'); // 这里你之前拼写错了vdieo
    }
    res.redirect('/setting/choose');
  });
});

4. 拼写错误

你的成功提示里把video拼成了vdieo,修正后才不会显示错误的提示文本。

额外优化建议

  • 不要直接用请求参数里的video值来删除文件,建议先从数据库查询到对应记录,拿到真实的文件名再执行删除,避免请求参数被篡改导致误删文件。
  • 可以改用fs.promises.unlink配合async/await写法,减少回调嵌套,让代码更易维护。

内容的提问来源于stack exchange,提问作者Max13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:44:21