2012-01-28 168 views
75

我与下列一起: The Node Beginner Book节点JS错误:ENOENT

从另一个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); 
    } 
} 

错误仍然存​​在:

Error: ENOENT, no such file or directory 'tmp'

app dir structure

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); 

有点为难,知道的任何帮助。

+1

你的'process.cwd()'是什么? – fent 2012-01-29 02:42:51

+3

在这里找到了解决方案:http://stackoverflow.com/questions/7681407/node-js-fs-stat-throws-enoent-the-operation-completed-successfully。喜欢这个论坛! – Wasabi 2012-02-01 00:37:28

回答

81

"/tmp/test.jpg"是不正确的路径 - 这条道路与/这是根目录开始。

在UNIX中,快捷方式到当前目录是.

试试这个"./tmp/test.jpg"

+5

他解释完全正确。 '/ tmp'与'。/ tmp'不同。 '/ tmp'不在当前目录下,它在根目录下。 – 3ocene 2016-09-07 22:33:41

-2

代替 “TMP”

的使用 “临时”, “/temp/test.png”

它为我工作后,我意识到tmp是我的电脑上不存在的临时文件夹,但我的临时文件夹是我的临时文件夹

///

编辑:

我也创造了我的C一个新文件夹 “TMP”:驱动器,一切都完美。这本书可能已经错过提的是小步

退房http://webchat.freenode.net/?channels=node.js与一些Node.js的社区从不同的目录聊天

0

可以包括不同的玉文件到您的模板,即以

views/ 
    layout.jade 
static/ 
    page.jade 

要包含从静态/ page.jade

page.jade

01观点DIR布局文件
extends ../views/layout 
8

如果您的tmp文件夹与您的代码正在运行的目录相关,请在/tmp前删除/

因此,您的代码中只有tmp/test.jpg。这在类似的情况下也适用于我。

18

为了扩大错误发生的原因:在路径开始处的正斜线意味着“从文件系统的根开始,寻找给定的路径”。没有正斜杠意味着“从当前工作目录开始,并查找给定的路径”。

路径

/tmp/test.jpg 

由此转换为在所述文件系统的根寻找tmp文件夹的文件test.jpg放在(例如C:\上的窗户,/在* nix),代替的webapp文件夹。在路径前添加句点(。)会明确地将其更改为“从当前工作目录开始”,但基本上与将正斜杠完全留出相同。

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