在 Express.js 简单应用程序中使用 fs.unlink 出现 ENOENT 错误?
ENOENT ERROR using fs.unlink in a Express.js Simple APP?
js.And 我正在 express.js 创建一个简单的博客。
我使用 Typicode/lowdb as database 到 create/update/delete,基于 data.json file.And 上的 id 的帖子使用 json 数组中的 slug 数据到 create/update/delete Node.js 文件系统 API 的降价帖子。在降价帖子的 删除侧 我得到一个错误我不明白。
{ [Error: ENOENT, unlink 'C:\Users\path\to\publicfolder\undefined.md']
errno: -4058,
code: 'ENOENT',
path: 'C:\Users\path\to\publicfolder\undefined.md' }
我正在使用 fs.unlink 来删除降价帖子:
var oldSlug = "public/"+req.params.slug+".md";
fs.unlink(oldSlug, function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the old markdown file: " + oldSlug +"");
}
});
以下是部分公开的代码示例:
create/update/delete 个帖子的示例 - Post.js
exports.index = function (req, res) {
res.render('post/index', { posts: db.list()});
};
exports.form = function (req, res) {
res.render('post/form');
};
exports.edit = function (req, res) {
var post = db.getById(req.params.id);
res.render('post/edit', {post: post})
}
exports.update = function (req, res) {
var slugTitle = slug(req.body.name).toLowerCase().split('.').join("");
var description = req.body.desc;
db.update({id: req.body.id, name: req.body.name, desc: req.body.desc,
slug: slugTitle});
//using this to rename and update markdown posts it work's
var oldPath = "public/"+req.body.slug+".md";
var newPath = "public/"+slugTitle+".md";
fs.unlink(oldPath, function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the old markdown file : oldPath ");
}
});
fs.writeFile(newPath, description, function(err) {
if(err) {
console.log(err);
} else {
console.log("The post was updated as: newPath ");
}
});
res.redirect('/post');};
exports.remove = function (req, res) {
db.remove(req.params.id);
//using this to delete markdown posts i get the error
//changing req.params.slug to req.body.slug still gives the error
var oldSlug = "public/"+req.params.slug+".md";
fs.unlink(oldSlug, function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the markdown file: " + oldSlug +"");
}
});
res.redirect('/post');};
Server.js
的例子
app.get('/post', post.index);
app.get('/post/create', post.form);
app.post('/post/create', post.save);
app.get('/post/details/:id', post.details);
app.get('/post/edit/:id', post.edit);
app.post('/post/update', post.update);
app.get('/post/delete/:id', post.remove);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
index.jade
的例子
doctype
html
head
title
body
h1 Posts
ul
each item in posts
li Item #{item.name} - #{item.desc} - #{item.slug}
a(href='/post/details/#{item.id}') Details -
a(href='/post/edit/#{item.id}') Edit -
a(href='/post/delete/#{item.id}') Delete
div
p
a(href='post/create') Add new
问题出在 post.js 文件中的 exports.remove 函数上,但为什么呢??我相信我正在识别要删除的降价文件,该文件对应于来自数据库中的文档? 我希望我的代码有意义。
问题是您没有将变量 slug
传递到 remove
路由的任何地方。由于您使用的是 GET,它不能来自 req.body,因此您必须将其传递到 URL 路径或作为查询字符串。
尝试更改这些行:
post.js
var oldSlug = "public/"+req.query.slug+".md";
index.jade
a(href='/post/delete/#{item.id}?slug=#{item.slug}') Delete
js.And 我正在 express.js 创建一个简单的博客。 我使用 Typicode/lowdb as database 到 create/update/delete,基于 data.json file.And 上的 id 的帖子使用 json 数组中的 slug 数据到 create/update/delete Node.js 文件系统 API 的降价帖子。在降价帖子的 删除侧 我得到一个错误我不明白。
{ [Error: ENOENT, unlink 'C:\Users\path\to\publicfolder\undefined.md']
errno: -4058,
code: 'ENOENT',
path: 'C:\Users\path\to\publicfolder\undefined.md' }
我正在使用 fs.unlink 来删除降价帖子:
var oldSlug = "public/"+req.params.slug+".md";
fs.unlink(oldSlug, function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the old markdown file: " + oldSlug +"");
}
});
以下是部分公开的代码示例:
create/update/delete 个帖子的示例 - Post.js
exports.index = function (req, res) {
res.render('post/index', { posts: db.list()});
};
exports.form = function (req, res) {
res.render('post/form');
};
exports.edit = function (req, res) {
var post = db.getById(req.params.id);
res.render('post/edit', {post: post})
}
exports.update = function (req, res) {
var slugTitle = slug(req.body.name).toLowerCase().split('.').join("");
var description = req.body.desc;
db.update({id: req.body.id, name: req.body.name, desc: req.body.desc,
slug: slugTitle});
//using this to rename and update markdown posts it work's
var oldPath = "public/"+req.body.slug+".md";
var newPath = "public/"+slugTitle+".md";
fs.unlink(oldPath, function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the old markdown file : oldPath ");
}
});
fs.writeFile(newPath, description, function(err) {
if(err) {
console.log(err);
} else {
console.log("The post was updated as: newPath ");
}
});
res.redirect('/post');};
exports.remove = function (req, res) {
db.remove(req.params.id);
//using this to delete markdown posts i get the error
//changing req.params.slug to req.body.slug still gives the error
var oldSlug = "public/"+req.params.slug+".md";
fs.unlink(oldSlug, function(err) {
if(err) {
console.log(err);
} else {
console.log("Deleted the markdown file: " + oldSlug +"");
}
});
res.redirect('/post');};
Server.js
的例子app.get('/post', post.index);
app.get('/post/create', post.form);
app.post('/post/create', post.save);
app.get('/post/details/:id', post.details);
app.get('/post/edit/:id', post.edit);
app.post('/post/update', post.update);
app.get('/post/delete/:id', post.remove);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
index.jade
的例子doctype
html
head
title
body
h1 Posts
ul
each item in posts
li Item #{item.name} - #{item.desc} - #{item.slug}
a(href='/post/details/#{item.id}') Details -
a(href='/post/edit/#{item.id}') Edit -
a(href='/post/delete/#{item.id}') Delete
div
p
a(href='post/create') Add new
问题出在 post.js 文件中的 exports.remove 函数上,但为什么呢??我相信我正在识别要删除的降价文件,该文件对应于来自数据库中的文档? 我希望我的代码有意义。
问题是您没有将变量 slug
传递到 remove
路由的任何地方。由于您使用的是 GET,它不能来自 req.body,因此您必须将其传递到 URL 路径或作为查询字符串。
尝试更改这些行:
post.js
var oldSlug = "public/"+req.query.slug+".md";
index.jade
a(href='/post/delete/#{item.id}?slug=#{item.slug}') Delete