找不到模块文件
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");
});
date.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');
using _dirname
in const date = require(__dirname + "/date.js");
没有用这里解释一下,为什么?
在 Node.js 中,__dirname
始终是当前执行脚本所在的目录。因此,如果您将 __dirname
键入 /dir1/dir2/myscript.js
,则该值将是 /d1/d2
.
相比之下,当您使用库时,.
为您提供 运行 在终端 window 中执行 node
命令的目录(即您的工作目录)像 path
和 fs
。从技术上讲,它最初是您的工作目录,但可以使用 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
中的文件,你会 always do
require('../thefile')
因为 require
中的路径总是相对于你调用它的文件。它与您的工作目录无关。
我正在上 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");
});
date.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');
using _dirname
in const date = require(__dirname + "/date.js");
没有用这里解释一下,为什么?
在 Node.js 中,__dirname
始终是当前执行脚本所在的目录。因此,如果您将 __dirname
键入 /dir1/dir2/myscript.js
,则该值将是 /d1/d2
.
相比之下,当您使用库时,.
为您提供 运行 在终端 window 中执行 node
命令的目录(即您的工作目录)像 path
和 fs
。从技术上讲,它最初是您的工作目录,但可以使用 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
中的文件,你会 always do
require('../thefile')
因为 require
中的路径总是相对于你调用它的文件。它与您的工作目录无关。