Error de nodo JS: ENOENT

87

Estoy siguiendo junto con: The Node Beginner Book

Después de probar con el código de otra publicación 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);
    }
}

El error persiste:

Error: ENOENT, no existe tal archivo o directorio 'tmp'

estructura de directorio de la aplicación

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 perplejo, se agradece cualquier ayuda.

Wasabi
fuente
1
¿cuál es tu process.cwd()?
Fent
3
Encontré la solución aquí: stackoverflow.com/questions/7681407/… . ¡Amo este foro!
Wasabi

Respuestas:

90

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

En unix, el acceso directo al directorio actual es .

Prueba esto "./tmp/test.jpg"

ihciad
fuente
5
Lo explica exactamente bien. /tmpes diferente de ./tmp. /tmpno está en el directorio actual, está en el directorio raíz.
3oceno
18

Para expandir un poco 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 dada". Sin barra diagonal significa "comenzar desde el directorio de trabajo actual y buscar la ruta dada".

El camino

/tmp/test.jpg

por lo tanto, se traduce en buscar el archivo test.jpg en la carpeta tmp en la raíz del sistema de archivos (por ejemplo, c: \ en Windows, / en * nix), en lugar de la carpeta de la aplicación web . Agregar un punto (.) Delante de la ruta cambia explícitamente esto para que diga "comenzar desde el directorio de trabajo actual", pero es básicamente lo mismo que dejar la barra inclinada completamente fuera.

./tmp/test.jpg = tmp/test.jpg
Jens Wegar
fuente
8

si su carpeta tmp es relativa al directorio donde se ejecuta su código, elimine el /frente de /tmp.

Así que solo tienes tmp/test.jpgen tu código. Esto funcionó para mí en una situación similar.

Dave Howell
fuente
0

Puede incluir un archivo jade diferente en su plantilla, desde un directorio diferente

views/
     layout.jade
static/
     page.jade

Para incluir el archivo de diseño desde el directorio de vistas a static / page.jade

page.jade

extends ../views/layout
Bastin Robin
fuente
0

cambio

"/tmp/test.jpg".

a

"./tmp/test.jpg"
Adeojo Emmanuel IMM
fuente
-6

use "temp" en lugar de "tmp"

"/temp/test.png"

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

///

EDITAR:

También creé una nueva carpeta "tmp" en mi unidad C: y todo funcionó perfectamente. Es posible que el libro no haya mencionado ese pequeño paso

echa un vistazo a http://webchat.freenode.net/?channels=node.js para charlar con algunos miembros de la comunidad de node.js

sQuijeW
fuente