nodejs:nodemon 应用程序崩溃 - 在启动之前等待文件更改
nodejs : nodemon app crashed - waiting for file changes before starting
我实际上是在 Udemy 上学习 nodejs 课程,突然在课程结束时,代码开始崩溃并出现一些错误。然后我尝试复制讲师的代码,但问题还是一样。
我也在 Whosebug 本身上关注了这个 answer,但问题仍然存在。
我在下面附上了所有的 js 文件,还有下面终端的错误消息:
Error message from the terminal
This is what the file structure looks like
现在的 js 文件:
app.js 文件:
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const adminRoutes = require('./routes/admin');
const shopRoutes = require('./routes/shop');
const errorController = require('./controllers/error');
const app = express();
app.set('view engine', 'ejs');
app.set('views', 'views');
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/admin', adminRoutes);
app.use(shopRoutes);
app.use(errorController.get404Page);
app.listen(3000);
controllers/error.js 文件:
exports.get404 = (req, res, next) => {
res.status(404).render('404', { pageTitle: 'Page Not Found' });
};
controllers/products.js文件
const Product = require('../models/product');
exports.getAddProduct = (req, res, next) => {
res.render('add-product', {
pageTitle: 'Add Product',
path: '/admin/add-product',
formsCSS: true,
productCSS: true,
activeAddProduct: true
});
};
exports.postAddProduct = (req, res, next) => {
const product = new Product(req.body.title);
product.save();
res.redirect('/');
};
exports.getProducts = (req, res, next) => {
Product.fetchAll(products => {
res.render('shop', {
prods: products,
pageTitle: 'Shop',
path: '/',
hasProducts: products.length > 0,
activeShop: true,
productCSS: true
});
});
};
models/product.js 文件:
const fs = require('fs');
const path = require('path');
const p = path.join(
path.dirname(process.main.filename),
'data',
'products.json'
);
const getProductsFromFile = cb => {
fs.readFile(p, (err, fileContent) => {
if (err) {
cb([]);
} else {
cb(JSON.parse(fileContent));
}
});
};
module.exports = class Product {
constructor(t) {
this.title = t;
}
save() {
getProductsFromFile(products => {
products.push(this);
fs.writeFile(p, JSON.stringify(products), err => {
console.log(err);
});
});
}
static fetchAll(cb) {
getProductsFromFile(cb);
}
};
routes/admin.js 文件:
const path = require('path');
const express = require('express');
const productsController = require('../controllers/products');
const router = express.Router();
// /admin/add-product => GET
router.get('/add-product', productsController.getAddProduct);
// /admin/add-product => POST
router.post('/add-product', productsController.postAddProduct);
module.exports = router;
routes/shop.js文件:
const path = require('path');
const express = require('express');
const productsController = require('../controllers/products');
const router = express.Router();
router.get('/', productsController.getProducts);
module.exports = router;
util/path.js file:
const path = require('path');
module.exports = path.dirname(process.main.filename);
我是后端开发的新手,具体来说是nodejs。请帮我找出错误。
在许多文件中,您使用了 process.main.filename
,但是 node.js 进程没有名为 process.name
的 属性,因此 process.main
是 undefined
.结果读取 属性 process.main.filename
给出了错误。
所以,解决你的问题:
将每个 process.main.filename
替换为
process.mainModule.filename
或 require.main.filename
(两者有区别,但在您的应用中无关紧要。)
看看它是否有效。我想这是你在编写代码时的错误。
提示:始终尝试使用终端输出来了解错误。这样你就可以解决大部分问题了。
我实际上是在 Udemy 上学习 nodejs 课程,突然在课程结束时,代码开始崩溃并出现一些错误。然后我尝试复制讲师的代码,但问题还是一样。
我也在 Whosebug 本身上关注了这个 answer,但问题仍然存在。
我在下面附上了所有的 js 文件,还有下面终端的错误消息:
Error message from the terminal
This is what the file structure looks like
现在的 js 文件:
app.js 文件:
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const adminRoutes = require('./routes/admin');
const shopRoutes = require('./routes/shop');
const errorController = require('./controllers/error');
const app = express();
app.set('view engine', 'ejs');
app.set('views', 'views');
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/admin', adminRoutes);
app.use(shopRoutes);
app.use(errorController.get404Page);
app.listen(3000);
controllers/error.js 文件:
exports.get404 = (req, res, next) => {
res.status(404).render('404', { pageTitle: 'Page Not Found' });
};
controllers/products.js文件
const Product = require('../models/product');
exports.getAddProduct = (req, res, next) => {
res.render('add-product', {
pageTitle: 'Add Product',
path: '/admin/add-product',
formsCSS: true,
productCSS: true,
activeAddProduct: true
});
};
exports.postAddProduct = (req, res, next) => {
const product = new Product(req.body.title);
product.save();
res.redirect('/');
};
exports.getProducts = (req, res, next) => {
Product.fetchAll(products => {
res.render('shop', {
prods: products,
pageTitle: 'Shop',
path: '/',
hasProducts: products.length > 0,
activeShop: true,
productCSS: true
});
});
};
models/product.js 文件:
const fs = require('fs');
const path = require('path');
const p = path.join(
path.dirname(process.main.filename),
'data',
'products.json'
);
const getProductsFromFile = cb => {
fs.readFile(p, (err, fileContent) => {
if (err) {
cb([]);
} else {
cb(JSON.parse(fileContent));
}
});
};
module.exports = class Product {
constructor(t) {
this.title = t;
}
save() {
getProductsFromFile(products => {
products.push(this);
fs.writeFile(p, JSON.stringify(products), err => {
console.log(err);
});
});
}
static fetchAll(cb) {
getProductsFromFile(cb);
}
};
routes/admin.js 文件:
const path = require('path');
const express = require('express');
const productsController = require('../controllers/products');
const router = express.Router();
// /admin/add-product => GET
router.get('/add-product', productsController.getAddProduct);
// /admin/add-product => POST
router.post('/add-product', productsController.postAddProduct);
module.exports = router;
routes/shop.js文件:
const path = require('path');
const express = require('express');
const productsController = require('../controllers/products');
const router = express.Router();
router.get('/', productsController.getProducts);
module.exports = router;
util/path.js file:
const path = require('path');
module.exports = path.dirname(process.main.filename);
我是后端开发的新手,具体来说是nodejs。请帮我找出错误。
在许多文件中,您使用了 process.main.filename
,但是 node.js 进程没有名为 process.name
的 属性,因此 process.main
是 undefined
.结果读取 属性 process.main.filename
给出了错误。
所以,解决你的问题:
将每个 process.main.filename
替换为
process.mainModule.filename
或 require.main.filename
(两者有区别,但在您的应用中无关紧要。)
看看它是否有效。我想这是你在编写代码时的错误。
提示:始终尝试使用终端输出来了解错误。这样你就可以解决大部分问题了。