[node.js] Node JS 오류 : ENOENT

나는 다음과 함께 :
Node Beginner Book

다른 SO 게시물의 코드로 테스트 한 후 :

var Fs = require('fs');

var dirs = ['tmp'];
var index;
var stats;

for (index = 0; index < dirs.length; ++index)
{
    try
    {
        stats = Fs.lstatSync(dirs[index]);
        console.log(dirs[index] + ": is a directory? " + stats.isDirectory());
    }
    catch (e)
    {
        console.log(dirs[index] + ": " + e);
    }
}

오류가 지속됩니다.

오류 : ENOENT, 해당 파일 또는 디렉토리 ‘tmp’가 없습니다.

앱 디렉토리 구조

tmp에 대한 권한은 777입니다.

requestHandlers.js

var querystring = require("querystring"),
    fs = require("fs");

function start(response, postData) {
  console.log("Request handler 'start' was called.");

  var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" '+
    'content="text/html; charset=UTF-8" />'+
    '<style>input{display: block; margin: 1em 0;}</style>'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

function upload(response, postData) {
  console.log("Request handler 'upload' was called.");
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("You've sent the text: "+
  querystring.parse(postData).text);
  response.end();
}

function show(response, postData) {
  console.log("Request handler 'show' was called.");
  fs.readFile("/tmp/test.jpg", "binary", function(error, file) {
    if(error) {
      response.writeHead(500, {"Content-Type": "text/plain"});
      response.write(error + "\n");
      response.end();
    } else {
      response.writeHead(200, {"Content-Type": "image/jpg"});
      response.write(file, "binary");
      response.end();
    }
  });
}

exports.start = start;
exports.upload = upload;
exports.show = show;

Index.js

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");

var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
handle["/show"] = requestHandlers.show;

server.start(router.route, handle);

약간 멍청하고 도움을 주시면 감사하겠습니다.



답변

"/tmp/test.jpg"올바른 경로가 아닙니다.이 경로 /는 루트 디렉토리 로 시작됩니다 .

유닉스에서 현재 디렉토리의 바로 가기는 다음과 같습니다. .

이 시도 "./tmp/test.jpg"


답변

오류가 발생한 이유를 조금 확장하려면 : 경로 시작 부분의 슬래시는 “파일 시스템의 루트에서 시작하여 주어진 경로를 찾으십시오”를 의미합니다. 슬래시는 “현재 작업 디렉토리에서 시작하여 주어진 경로를 찾으십시오”를 의미합니다.

경로

/tmp/test.jpg

따라서 webapp 폴더 대신 파일 시스템의 루트에있는 tmp 폴더 (예 : c : \ on windows, / on * nix)에서 test.jpg 파일을 찾는 것으로 변환됩니다 . 경로 앞에 마침표 (.)를 추가하면 명시 적으로 “현재 작업 디렉토리에서 시작”으로 변경되지만 기본적으로 슬래시를 완전히 제외하는 것과 동일합니다.

./tmp/test.jpg = tmp/test.jpg


답변

당신의 TMP 폴더는 코드가 삭제를 실행하는 디렉토리에 상대적 경우 /앞에 /tmp.

그래서 당신 tmp/test.jpg은 당신의 코드에 있습니다. 이것은 비슷한 상황에서 저에게 효과적이었습니다.


답변

다른 디렉토리에있는 다른 jade 파일을 템플릿에 포함 할 수 있습니다.

views/
     layout.jade
static/
     page.jade

뷰 디렉토리에서 static / page.jade로 레이아웃 파일을 포함하려면

page.jade

extends ../views/layout


답변

변화

"/tmp/test.jpg".

…에

"./tmp/test.jpg"


답변

“tmp”대신 “temp”사용

“/temp/test.png”

tmp가 내 컴퓨터에 존재하지 않는 임시 폴더라는 것을 깨달은 후에 작동했지만 내 임시 폴더는 내 임시 폴더였습니다.

///

편집하다:

또한 내 C : 드라이브에 새 폴더 “tmp”를 만들었고 모든 것이 완벽하게 작동했습니다. 책에서 그 작은 단계를 언급하지 않았을 수 있습니다.

http://webchat.freenode.net/?channels=node.js 를 확인 하여 node.js 커뮤니티의 일부와 채팅 하십시오.


답변