Node.js ไม่สามารถเปิดไฟล์ได้ ข้อผิดพลาด: ENOENT, stat "./path/to/file"


126

ฉันได้พัฒนาโปรแกรม node.js โดยใช้เฟรมเวิร์กด่วนบนคอมพิวเตอร์ของฉันซึ่งมันทำงานได้ดีโดยไม่มีข้อตำหนิ

อย่างไรก็ตามเมื่อฉันเรียกใช้โปรแกรมบนอุปกรณ์ SUSE Studio ของฉันซึ่งมีจุดประสงค์เพื่อใช้งานจริงฉันได้รับข้อผิดพลาดในการโต้ตอบไฟล์ใด ๆ

Error: ENOENT, stat './path/to/file'

ฉันตรวจสอบแล้วว่าสิทธิ์ของไฟล์นั้นถูกต้องตามที่เป็นจริง คอมพิวเตอร์และเครื่องใช้ของฉันกำลังเรียกใช้โหนดเวอร์ชันที่แตกต่างกันหากมีความสำคัญ

ความคิดใด ๆ ?


1
เนื่องจากเส้นทางนั้นสัมพันธ์กันบางทีคุณอาจเรียกใช้จากไดเรกทอรีอื่น คุณสร้างเส้นทางอย่างไรและโครงสร้างไดเร็กทอรีคืออะไร? และคุณกำลังรันโหนดอย่างไร?
loganfsmyth

1
ขอบคุณใช่ฉันกำลังเรียกใช้สคริปต์จากไดเร็กทอรีอื่นและคิดอย่างโง่ ๆ ว่าพา ธ ไฟล์จะสัมพันธ์กับสคริปต์นั้นเอง ฉันรู้ว่ามันเป็นอะไรที่เรียบง่ายเช่นนี้ :)

มันควรจะแก้ไขได้ คุณสามารถเพิ่มโค้ดที่แสดงวิธีการสร้างเส้นทางและสิ่งที่คุณคาดหวังว่าจะแก้ไขได้หรือไม่ หากคุณต้องการให้สัมพันธ์กับไฟล์ใดไฟล์หนึ่งโดยปกติคุณจะทำ__dirname + 'path/to/file';
loganfsmyth

ใช่นั่นคือสิ่งที่ฉันทำไปแล้ว ฉันกำลังเรียกใช้สคริปต์โดยเรียกใช้ "node ~ / path / to / script.js" และคาดว่าการอ้างอิงสัมพัทธ์ไปยังไฟล์ในสคริปต์ของฉันเพื่อแก้ไขเป็น "~ / path / to" ขอบคุณ!

คำตอบ:


187

พา ธ ที่ระบุด้วย a .สัมพันธ์กับไดเร็กทอรีการทำงานปัจจุบันไม่สัมพันธ์กับไฟล์สคริปต์ ดังนั้นไฟล์อาจจะพบถ้าคุณทำงานแต่ไม่ถ้าคุณเรียกnode app.js node folder/app.jsข้อยกเว้นเพียงประการเดียวสำหรับสิ่งนี้คือrequire('./file')และเป็นไปได้เพราะrequireมีอยู่ต่อโมดูลดังนั้นจึงรู้ว่าโมดูลถูกเรียกใช้จากโมดูลใด

ในการสร้างเส้นทางที่สัมพันธ์กับสคริปต์คุณต้องใช้__dirnameตัวแปร

var path = require('path');

path.join(__dirname, 'path/to/file')

หรืออาจเป็นไปได้

path.join(__dirname, 'path', 'to', 'file')

11
ขอบคุณ; บางครั้งก็เป็นเรื่องเล็กน้อยเช่นนี้ที่หาได้ยากในเอกสารสำหรับมือใหม่ (เช่นฉัน!)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.