Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node JS Error: ENOENT

Tags:

node.js

I'm following along with: The Node Beginner Book

After testing with the code from another SO post:

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

The error persist:

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

app dir structure

The permissions on tmp are 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); 

A little stumped, any help appreciated.

like image 250
Wasabi Avatar asked Jan 28 '12 17:01

Wasabi


People also ask

How do I fix error Enoent No such file or directory?

To resolve the ENOENT warning message, you need to add a package. json file in the directory where you run the npm install command. And then run your npm install command again. This time, the warning message should not appear.

What does error code Enoent mean?

It's an abbreviation of Error NO ENTry (or Error NO ENTity), and can actually be used for more than files/directories. It's abbreviated because C compilers at the dawn of time didn't support more than 8 characters in symbols. Follow this answer to receive notifications. edited Jun 4, 2019 at 14:30. community wiki.

What is HTTP errors in node JS?

HTTP-errors module is used for generating errors for Node. js applications. It is very easy to use.


2 Answers

"/tmp/test.jpg" is not the correct path – this path starts with / which is the root directory.

In unix, the shortcut to the current directory is .

Try this "./tmp/test.jpg"

like image 81
ihciad Avatar answered Oct 09 '22 04:10

ihciad


To expand a bit on why the error happened: A forward slash at the beginning of a path means "start from the root of the filesystem, and look for the given path". No forward slash means "start from the current working directory, and look for the given path".

The path

/tmp/test.jpg 

thus translates to looking for the file test.jpg in the tmp folder at the root of the filesystem (e.g. c:\ on windows, / on *nix), instead of the webapp folder. Adding a period (.) in front of the path explicitly changes this to read "start from the current working directory", but is basically the same as leaving the forward slash out completely.

./tmp/test.jpg = tmp/test.jpg 
like image 20
Jens Wegar Avatar answered Oct 09 '22 05:10

Jens Wegar