【问题标题】:Unexpected error generated by the node js delete code节点js删除代码产生的意外错误
【发布时间】:2020-12-24 21:21:21
【问题描述】:

我正在尝试删除我的节点项目中的帖子,但它引发了错误。即便如此,Delete 也能正常工作,但我无法弄清楚为什么以及在何处生成此错误。

我已尝试在控制台中打印这些步骤。请帮我弄清楚是什么错误!

路由器

.delete(cors.corsWithOptions, authenticate.verifyUser, (req, res, next)=>{
    Posts.findById(req.params.postId)
    .then(async (post) => {
        console.log('Post with id: '+req.params.postId+' found!');
        if(String(req.user._id) === String(post.posted_by)){
            if(post.image){
                fs.unlink('public/uploads/images/'+post.image  , async (err) => {
                    if (err) next(err);
                    console.log('file was deleted');
                });
            }
            post.remove()
            .then((resp) => {
                console.log('Post with id: '+req.params.postId+' removed!');
                // res.statusCode = 200;
                // res.setHeader('Content-Type','text/html');
                res.redirect('/');
            })
            .catch((err) => next(err));
        }
        else{
            var err = new Error('You are not allowed to delete someone else\'s post!');
            err.status = 403;
            next(err);
        }
    }, (err) => next(err))
    .then((err) => next(err));
    
    // Posts.findByIdAndRemove(req.params.postId)
    // .then((resp) => {
    //     res.statusCode = 200;
    //     console.log('Post deleted', resp);
    //     res.setHeader('Content-Type','text/html');
    //     // alert('The post has been deleted!');
    //     res.redirect('/');
    // }, (err) => next(err))
    // .catch((err) => next(err));
});

错误:

Post with id: 5f546a64dd65b83720448305 found!
ClientError [NotFoundError]: Not Found
    at E:\NodeJS Project\app.js:76:8
    at Layer.handle [as handle_request] (E:\NodeJS Project\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (E:\NodeJS Project\node_modules\express\lib\router\index.js:317:13)
    at E:\NodeJS Project\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (E:\NodeJS Project\node_modules\express\lib\router\index.js:335:12)
    at next (E:\NodeJS Project\node_modules\express\lib\router\index.js:275:10)
    at E:\NodeJS Project\node_modules\express\lib\router\index.js:635:15
    at next (E:\NodeJS Project\node_modules\express\lib\router\index.js:260:14)
    at next (E:\NodeJS Project\node_modules\express\lib\router\route.js:127:14)
    at E:\NodeJS Project\routes\postRouter.js:209:20
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
DELETE /post/5f546a64dd65b83720448305/edit?_method=DELETE 404 131.474 ms - 3752
file was deleted
Post with id: undefined removed!
GET /stylesheets/style.css 304 82.387 ms - -
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:518:11)
    at ServerResponse.header (E:\NodeJS Project\node_modules\express\lib\response.js:767:10)
    at ServerResponse.location (E:\NodeJS Project\node_modules\express\lib\response.js:884:15)
    at ServerResponse.redirect (E:\NodeJS Project\node_modules\express\lib\response.js:922:18)
    at E:\NodeJS Project\routes\postRouter.js:199:21
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

【问题讨论】:

    标签: node.js mongodb express mongoose ejs


    【解决方案1】:

    我会做这样的事情,它会清除所有回调混乱

    另请注意,您的文件路径可能有问题,您可能需要将. 添加到./public/...

    // does not need to be in the route
    const removeFile = (filepath) => {
      return new Promise((resolve, reject) => {
        try {
          fs.unlink(filepath, (err) => {
            if (err) throw err;
            console.log('file was deleted');
            resolve()
          });
        } catch (err) {
          reject(err)
        }
      })
    }
    
    app.delete(cors.corsWithOptions, authenticate.verifyUser, async (req, res, next) => {
      try {
        const post = await Posts.findById(req.params.postId)
        console.log(`Post with id: ${req.params.postId} found!`);
    
        if (String(req.user._id) !== String(post.posted_by)) {
          var err = new Error('You are not allowed to delete someone else\'s post!');
          err.status = 403;
          throw err;
        }
    
        if (post.image) await removeFile(`public/uploads/images/${post.image}`)
        await post.remove()
    
        console.log(`Post with id: ${req.params.postId} removed!`);
        res.redirect('/');
      } catch (err) {
        next(err)
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2023-03-28
      相关资源
      最近更新 更多