簡體   English   中英

找不到模塊文件

[英]cannot find module file

我正在做我的 Udemy 課程,現在我是堆棧;(如果有人可以幫助我,那就太好了:所以錯誤說“錯誤。找不到模塊'/Users/yui/Desktop/todolist-v1/date:js' 需要堆棧。-/Users/yui/Desktop/todolist-v1/app.js"

但我不確定他們為什么找不到模塊。 提前致謝。

app.js 文件

//jshint esversion:6

const express = require("express");
const bodyParser = require("body-parser");
const date = require(__dirname + "/date.js");

const app = express();

let items = ["Buy Food","Cook Food","Eat Food"];
let workItems = [];

app.set("view engine", "ejs");

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));

app.get("/", function(req, res){

 let day = date();

 res.render("list", {ListTitle: day, NewListItems: items});

});

app.post("/", function(req, res){

 let item = req.body.newItem;

 if(req.body.list === "Work"){
   workItems.push(item);
   res.redirect("/work");
 }else{
   items.push(item);
   res.redirect("/")
 }
});

app.get("/about", function(req, res){
   res.render("about")
});

app.get("/work", function(req, res){
   res.render("list", {ListTitle: "Work List", NewListItems: workItems});
});

app.post("/work", function(req, res){
   let item = req.body.newItem;
   workItems.push(item);
   res.redirect("/work");
})


app.listen(3000, function(){
 console.log("Server is running on port 3000");
});

日期.js 文件

//jshint esversion:6

module.exports = getDate;

function getDate(){

 let today = new Date();

 let currentDay = today.getDay();

 let day = "";
  
 let options = {
    weekday: "long",
    day: "numeric",
    month: "long"
 };

 let day = today.toLocaleDateString("en-US", options);

};

如果 app.js 和 date.js 在同一個文件夾中,則不需要使用 __dirname。

只需使用這行代碼導入任何 js 文件。

const getDate = require('./date.js');

例如,如果這是您的項目結構

/main_app_folder/app.js
/main_app_folder/helpers/data.js

您可以使用這行代碼從 app.js 導入 helpers 文件夾中的任何 js 文件

const getDate = require('./helpers/date.js');

const date = require(__dirname + "/date.js");中使用_dirname是沒有用的這是解釋,為什么?
__dirname中,__dirname 始終是當前執行腳本所在的目錄。 因此,如果您將__dirname鍵入/dir1/dir2/myscript.js ,則該值將是/d1/d2

相比之下, . 當您使用pathfs等庫時,為您提供在終端 window 中運行node命令的目錄(即您的工作目錄)。 從技術上講,它從您的工作目錄開始,但可以使用process.chdir()進行更改。

例外是當您使用. require() require中的路徑總是相對於包含對require的調用的文件。

例如...

假設您的目錄結構是

|--dir1
  |--dir2
     pathtest.js

pathtest.js包含

var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));

你也是

cd /dir1/dir2
node pathtest.js

你得到

. = /dir1/dir2
__dirname = /dir1/dir2

你的工作目錄是/dir1/dir2所以這就是. 解決。 由於pathtest.js位於/dir1/dir2中,這__dirname解析的內容。

但是,如果您從/dir1運行腳本

cd /dir1
node dir2/pathtest.js

你得到

. = /dir1
__dirname = /dir1/dir2

在這種情況下,您的工作目錄是/dir1所以這就是. 解析為,但__dirname仍解析為/dir1/dir2

使用. 里面require ...

如果在dir2/pathtest.js ,您require調用在dir1中包含一個文件,您總是會這樣做

require('../thefile')

因為require中的路徑總是相對於你調用它的文件。 它與您的工作目錄無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM