节点JS错误:ENOENT

我正在跟随: 节点初学者书

用另一个SOpost的代码testing之后:

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"不是正确的path – 这个path以/哪个是根目录开始。

在unix中,当前目录的快捷方式是.

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

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

path

 /tmp/test.jpg 

从而转换为在文件系统根目录下的tmp文件夹(例如c:\ windows,/ on * nix)中查找test.jpg文件,而不是webapp文件夹。 在path前添加一个句点(。)明确地将其改为“从当前工作目录开始”,但基本上与将正斜杠完全留下相同。

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

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

所以你只需要在你的代码中使用tmp/test.jpg 。 这在类似的情况下也适用于我。

您可以在您的模板中包含不同的玉石文件,以便从不同的目录

 views/ layout.jade static/ page.jade 

将视图dir中的布局文件包含到static / page.jade

page.jade

 extends ../views/layout 

用“temp”代替“tmp”

“/temp/test.png”

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

///

编辑:

我也在我的C盘创build了一个新的文件夹“tmp”,一切正常。 这本书可能已经错过了一小步

查看http://webchat.freenode.net/?channels=node.js与一些node.js社区聊天;