2012-01-28 13 views
75

estoy siguiendo, junto con: The Node Beginner BookNodo JS error: ENOENT

Después de probar con el código de otro SO mensaje: persisten

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

El error:

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

app dir structure

Los permisos en tmp son 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); 

Un poco stumped, cualquier ayuda apreciada.

+1

¿cuál es su 'process.cwd()'? – fent

+3

encontró la solución aquí: http://stackoverflow.com/questions/7681407/node-js-fs-stat-throws-enoent-the-operation-completed-successfully. Me encanta este foro! – Wasabi

Respuesta

81

"/tmp/test.jpg" no es la ruta correcta; esta ruta comienza con / que es el directorio raíz.

En UNIX, el acceso directo al directorio actual es .

probar este "./tmp/test.jpg"

+5

Él lo explica exactamente. '/ tmp' es diferente de'./tmp'. '/ tmp' no está en el directorio actual, está en el directorio raíz. – 3ocene

-2

uso "temporal" en lugar de "tmp"

"/temp/test.png"

funcionó después de que me di cuenta de que el tmp es una carpeta temporal que no existía en mi computadora, pero mi temperatura era mi carpeta temporal

///

EDIT:

También he creado una nueva carpeta "tmp" en mi unidad C: y todo funcionaba perfectamente. El libro puede haber perdido mencionar ese pequeño paso

la salida http://webchat.freenode.net/?channels=node.js para charlar con algunos de la comunidad Node.js

0

Se puede incluir un archivo de jade diferentes en su plantilla, que a partir de un directorio diferente

views/ 
    layout.jade 
static/ 
    page.jade 

Para incluir el archivo de diseño de puntos de vista dir para estática/page.jade

page.jade

extends ../views/layout 
8

si su carpeta tmp es relativa al directorio donde se está ejecutando su código, elimine el / delante de /tmp.

Así que solo tiene tmp/test.jpg en su código. Esto funcionó para mí en una situación similar.

18

Para ampliar un poco sobre por qué ocurrió el error: Una barra inclinada al comienzo de una ruta significa "comenzar desde la raíz del sistema de archivos, y buscar la ruta determinada". Sin barra inclinada significa "comenzar desde el directorio de trabajo actual y buscar la ruta determinada".

El camino

/tmp/test.jpg 

traduce así a buscar el archivo test.jpg en la carpeta tmp en la raíz del sistema de archivos (por ejemplo, c: \ en las ventanas,/en * nix), en vez de la carpeta webapp. Agregar un punto (.) Al frente de la ruta lo cambia explícitamente para que diga "comience desde el directorio de trabajo actual", pero es básicamente lo mismo que dejar la barra hacia afuera por completo.

./tmp/test.jpg = tmp/test.jpg 
Cuestiones relacionadas