實際上,我正在學習 Udemy 上的 nodejs 課程,突然間,課程開始中斷,并出現一些錯誤。然后我嘗試復制講師的代碼,但問題仍然是一樣的。
我也在StackOverflow 本身上遵循了這個答案,但問題仍然存在。
我附上了下面的所有 js 檔案以及來自下面終端的錯誤訊息:
來自終端的錯誤訊息
這是檔案結構的樣子
現在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);
控制器/error.js 檔案:
exports.get404 = (req, res, next) => {
res.status(404).render('404', { pageTitle: 'Page Not Found' });
};
控制器/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
});
});
};
模型/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);
}
};
路線/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;
路線/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。請幫我找出我的錯誤。
uj5u.com熱心網友回復:
在您使用過的許多檔案中process.main.filename,但沒有process.name為 node.js 行程命名的屬性,process.main所以undefined. 結果,讀取該屬性process.main.filename會給出錯誤。
因此,要解決您的問題:
將每個替換process.main.filename為
process.mainModule.filenameORrequire.main.filename
(兩者都有區別,但在您的應用程式中并不重要。)
看看它是否有效。我想這是您在撰寫代碼時的錯誤。
提示:始終嘗試使用終端輸出來理解錯誤。這樣你就可以解決大部分問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422745.html
標籤:
