Śledzę razem z: The Node Beginner Book
Po przetestowaniu z kodem z innego postu 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);
}
}
Błąd nadal występuje:
Błąd: ENOENT, brak takiego pliku lub katalogu „tmp”
Uprawnienia do tmp to 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);
Trochę zaskoczony, każda pomoc doceniona.
process.cwd()
?Odpowiedzi:
"/tmp/test.jpg"
nie jest poprawną ścieżką - ta ścieżka zaczyna się od tego,/
który jest katalogiem głównym.W systemie UNIX skrót do bieżącego katalogu to
.
Spróbuj tego
"./tmp/test.jpg"
źródło
/tmp
różni się od./tmp
./tmp
nie znajduje się w bieżącym katalogu, znajduje się w katalogu głównym.Aby wyjaśnić, dlaczego wystąpił błąd: Ukośnik na początku ścieżki oznacza „zacznij od katalogu głównego systemu plików i poszukaj podanej ścieżki”. Brak ukośnika oznacza „zacznij od bieżącego katalogu roboczego i poszukaj podanej ścieżki”.
Ścieżka
w ten sposób oznacza szukanie pliku test.jpg w folderze tmp w katalogu głównym systemu plików (np. c: \ w systemie Windows, / on * nix), zamiast w folderze webapp . Dodanie kropki (.) Przed ścieżką jawnie zmienia to na „rozpocznij od bieżącego katalogu roboczego”, ale jest zasadniczo tym samym, co całkowite pozostawienie ukośnika.
źródło
jeśli twój folder tmp jest względny w stosunku do katalogu, w którym działa twój kod, usuń
/
przed/tmp
.Więc po prostu masz
tmp/test.jpg
w swoim kodzie. U mnie to zadziałało w podobnej sytuacji.źródło
Możesz dołączyć inny plik jade do swojego szablonu, pochodzący z innego katalogu
views/ layout.jade static/ page.jade
Aby dołączyć plik układu z katalogu views dir do static / page.jade
page.jade
extends ../views/layout
źródło
zmiana
"/tmp/test.jpg".
do
"./tmp/test.jpg"
źródło
użyj „temp” zamiast „tmp”
„/temp/test.png”
zadziałało dla mnie po tym, jak zdałem sobie sprawę, że tmp jest folderem tymczasowym, którego nie było na moim komputerze, ale mój temp był moim folderem tymczasowym
///
EDYTOWAĆ:
Utworzyłem również nowy folder „tmp” na moim dysku C: i wszystko działało idealnie. Książka mogła nie wspomnieć o tym małym kroku
sprawdź http://webchat.freenode.net/?channels=node.js, aby porozmawiać z niektórymi członkami społeczności node.js
źródło