晚上,这里是初学者。
我正在尝试为我在本地制造的使用fs.mkdir方法创建目录的小型服务器创建MKCOL方法,当我创建不存在的目录时,它将按照我想要的方式运行,但是当该目录存在,它在我尝试处理但无法处理的服务器中引发错误,这是该服务器以及我的MKCOL方法使用的功能:
<div class="overlay"></div>
<div class="div-general">
<!-- All <app-components> -->
<p>Sample text</p>
Sample text Sample text Sample text Sample text Sample text
</div>
这是给我一些问题的方法:
const {createServer} = require("http");
const methods = Object.create(null);
createServer((request, response) => {
let handler = methods[request.method] || notAllowed;
handler(request)
.catch(error => {
if (error.status != null) return error;
return {body: String(error), status: 500};
})
.then(({body, status = 200, type = "text/plain"}) => {
response.writeHead(status, {"Content-Type": type});
if (body && body.pipe) body.pipe(response);
else response.end(body);
});
}).listen(8000);
async function notAllowed(request) {
return {
status: 405,
body: `Method ${request.method} not allowed.`
};
}
var {parse} = require("url");
var {resolve, sep} = require("path");
var baseDirectory = process.cwd();
function urlPath(url) {
let {pathname} = parse(url);
let path = resolve(decodeURIComponent(pathname).slice(1));
if (path != baseDirectory &&
!path.startsWith(baseDirectory + sep)) {
throw {status: 403, body: "Forbidden"};
}
return path;
}
当请求的文件夹存在时,我希望此MKCOL方法执行的操作只是通知客户端它存在,但是我无法实现该功能,只是在服务器内部将错误抛出而不通知客户端,但它仍然可以在不存在时创建文件夹。
答案 0 :(得分:0)
问题是我忘了在调用mkdir时添加等待,我也将传递给mkdir的递归对象也写错了。
methods.MKCOL = async function(request){
let path = urlPath(request.url);
await mkdir(path, {recursive: false}, error =>{
console.log(error.code);
if(error.code != "EEXIST") throw error;
else return {body: "folder already exists",status: 204};
});
return {status: 204};
};
现在,尽管发送到客户端的消息不是我所期望的消息(从传递给服务器的主体中的“文件夹已经存在”),它仍然可以正常工作