尝试处理mkdir引发的错误

时间:2019-10-30 19:36:12

标签: node.js

晚上,这里是初学者。

我正在尝试为我在本地制造的使用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方法执行的操作只是通知客户端它存在,但是我无法实现该功能,只是在服务器内部将错误抛出而不通知客户端,但它仍然可以在不存在时创建文件夹。

1 个答案:

答案 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};

};


现在,尽管发送到客户端的消息不是我所期望的消息(从传递给服务器的主体中的“文件夹已经存在”),它仍然可以正常工作