节点js删除代码产生的意外错误
Unexpected error generated by the node js delete code
我试图在我的节点项目中删除一个 post,但它抛出了一个错误。即使那样删除也能正常工作,但我无法弄清楚为什么会产生这个错误以及在哪里产生这个错误。
我已经尝试在控制台中打印这些步骤。请帮我看看哪里错了!
路由器
.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)
我会做这样的事情,它会清除所有回调混乱
另请注意,您可能遇到文件路径问题,您可能需要将 .
添加到 ./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)
}
});
我试图在我的节点项目中删除一个 post,但它抛出了一个错误。即使那样删除也能正常工作,但我无法弄清楚为什么会产生这个错误以及在哪里产生这个错误。
我已经尝试在控制台中打印这些步骤。请帮我看看哪里错了!
路由器
.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)
我会做这样的事情,它会清除所有回调混乱
另请注意,您可能遇到文件路径问题,您可能需要将 .
添加到 ./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)
}
});