I am doing my Udemy course and I am stack now;( If anyone can help me it would be great: So the Error said "Error. Cannot find module '/Users/yui/Desktop/todolist-v1/date:js' Require stack. - /Users/yui/Desktop/todolist-v1/app.js"
but I am not sure why they cannot find module. Thanks in advance.
app.js file
//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 file
//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);
};
If app.js and date.js in the same folder you didn't need to use __dirname.
Just use this line of code for import any js file.
const getDate = require('./date.js');
For example if this your project structure
/main_app_folder/app.js
/main_app_folder/helpers/data.js
You can use this line of code for import any js file inside helpers folder from app.js
const getDate = require('./helpers/date.js');
There is no use of using _dirname
in const date = require(__dirname + "/date.js");
Here is the explanation, why?
In Node.js, __dirname
is always the directory in which the currently executing script resides. So if you typed __dirname
into /dir1/dir2/myscript.js
, the value would be /d1/d2
.
By contrast, .
gives you the directory from which you ran the node
command in your terminal window (ie your working directory) when you use libraries like path
and fs
. Technically, it starts out as your working directory but can be changed using process.chdir()
.
The exception is when you use .
with require()
. The path inside require
is always relative to the file containing the call to require
.
Let's say your directory structure is
|--dir1
|--dir2
pathtest.js
and pathtest.js
contains
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
and you do
cd /dir1/dir2
node pathtest.js
you get
. = /dir1/dir2
__dirname = /dir1/dir2
Your working directory is /dir1/dir2
so that's what .
resolves to. Since pathtest.js
is located in /dir1/dir2
that's what __dirname
resolves to as well.
However, if you run the script from /dir1
cd /dir1
node dir2/pathtest.js
you get
. = /dir1
__dirname = /dir1/dir2
In that case, your working directory was /dir1
so that's what .
resolved to, but __dirname
still resolves to /dir1/dir2
.
.
inside require
... If inside dir2/pathtest.js
you have a require
call into include a file inside dir1
you would always do
require('../thefile')
because the path inside require
is always relative to the file in which you are calling it. It has nothing to do with your working directory.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.