नोड जेएस त्रुटि: पर्याप्त


87

मैं साथ में चल रहा हूं: द नोड बिगिनर बुक

किसी अन्य 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);
    }
}

त्रुटि बनी रहती है:

त्रुटि: 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);

थोड़ा स्टम्प्ड, किसी भी मदद की सराहना की।


1
क्या आपके है process.cwd()?
fent

3
यहाँ समाधान मिला: stackoverflow.com/questions/7681407/… । इस मंच से प्यार करो!
वसाबी

जवाबों:


90

"/tmp/test.jpg"सही रास्ता नहीं है - यह रास्ता वह है /जिसके साथ रूट डायरेक्टरी है।

यूनिक्स में, वर्तमान निर्देशिका का शॉर्टकट है .

इसे इस्तेमाल करे "./tmp/test.jpg"


5
वह इसे बिल्कुल सही बताते हैं। /tmpसे अलग है ./tmp/tmpवर्तमान निर्देशिका में नहीं है, यह रूट निर्देशिका में है।
3ocene

18

त्रुटि क्यों हुई, इस पर थोड़ा विस्तार करने के लिए: पथ की शुरुआत में एक फ़ॉरवर्ड स्लैश का अर्थ है "फाइलसिस्टम की जड़ से शुरू करें, और दिए गए पथ की तलाश करें"। फॉरवर्ड स्लैश का मतलब "वर्तमान कार्यशील निर्देशिका से शुरू करें, और दिए गए मार्ग की तलाश करें"।

राह

/tmp/test.jpg

इस प्रकार फ़ाइल टैस्ट फ़ोल्डर में फाइल टेस्ट.जेपीजी की तलाश में अनुवाद करता है, जैसे कि फाइल सिस्टम के मूल में tmp फोल्डर में (जैसे c: \ on windows, / on * nix), वेबैप फोल्डर के बजाय । पथ के सामने एक अवधि (।) जोड़ना स्पष्ट रूप से इसे "वर्तमान कार्यशील निर्देशिका से प्रारंभ" पढ़ने के लिए बदल देता है, लेकिन मूल रूप से आगे स्लैश को पूरी तरह से छोड़ने के समान है।

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

8

यदि आपका tmp फ़ोल्डर उस निर्देशिका के सापेक्ष है जहां आपका कोड /सामने चल रहा है, तो उसे हटा दें /tmp

तो आप बस tmp/test.jpgअपने कोड में है। यह मेरे लिए एक समान स्थिति में काम किया।


0

आप अपने टेम्पलेट में एक अलग जेड फ़ाइल शामिल कर सकते हैं, जो कि एक अलग निर्देशिका से

views/
     layout.jade
static/
     page.jade

लेआउट फ़ाइल को dir से static / page.jade में शामिल करने के लिए

page.jade

extends ../views/layout


-6

"tmp" के बदले में "temp" का उपयोग करें

"/Temp/test.png"

यह मेरे लिए काम करने के बाद मुझे एहसास हुआ कि tmp एक अस्थायी फ़ोल्डर है जो मेरे कंप्यूटर पर मौजूद नहीं था, लेकिन मेरा अस्थायी मेरा अस्थायी फ़ोल्डर था

///

संपादित करें:

मैंने अपने C: ड्राइव में एक नया फ़ोल्डर "tmp" भी बनाया और सब कुछ पूरी तरह से काम किया। पुस्तक में उस छोटे से कदम का जिक्र करने से चूक गए होंगे

http://webchat.freenode.net/?channels=node.js कुछ नोड.जेएस समुदाय के साथ चैट करने के लिए बाहर की जाँच करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.