每当我尝试运行此代码时,它总是显示 cannot read property 'cookie' of undefined
而这里的 undefined
是 request
对象。即使我尝试渲染某些内容,它也会显示无法 read property render
的响应对象。所以,我无法理解为什么我的 request(req)
和 response(res)
对象是 undefined
。如果我正常运行而不是在 MVC 模式中,此代码可以正常工作。
index.js:
const express = require('express')
const ejs = require('ejs')
const session = require('express-session')
const cookieparser = require('cookie-parser')
const mongoconnect = require('./util/database').mongoconnect
const index = require('./routes/index')
const products = require('./routes/product')
const app = express()
app.use(express.static('public'))
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
app.use(cookieparser())
app.use(session({
secret: 'secret',
saveUninitialized: false,
resave: false
}))
app.set('view engine', 'ejs')
app.use('/products', products)
app.use('/', index)
mongoconnect(client => {
console.log(client)
app.listen(3000, err => {
if(err)
console.log(err)
})
})
routes/products.js:
const express = require('express')
const router = express.Router()
const product = require('../controller/product.js')
const isseller = require('../middleware/auth.js')
const isuser = require('../middleware/auth.js')
router.get('/addproduct', isseller, product.getAddproduct())
router.post('/addproduct', isseller, product.postAddproduct())
router.get('/myproducts', isseller, product.getMyproducts())
router.get('/edit/:productID', isseller, product.getEditproduct())
router.post('/edit/:productID', isseller, product.postEditproduct())
router.delete('/delete/:productID', isseller, product.deleteproduct())
router.get('/:productID', product.getProduct())
router.get('/:productID/reviews', product.getProductreviews())
router.get('/:productID/reviews/create', isuser, product.getCreatereview())
router.post('/:productID/reviews/create', isuser, product.postCreatereview())
module.exports = router
controllers/products.js:
const product = require("../models/product")
let prodname = ""
let proddesc = ""
let prodcategory = ""
let prodprice = ""
let userid = 0
let productID = 0
let review = ""
let reviewdate = ""
let insertid = ""
exports.getAddproduct = (req, res, next) => {
res.render('addproduct.ejs')
}
exports.postAddproduct = (req, res, next) => {
prodname = req.body.name
proddesc = req.body.desc
prodcategory = req.body.category
prodprice = parseInt(req.body.price)
userid = req.cookies.logininfo.userid
const product = new product(prodname, proddesc, prodcategory, prodprice, userid)
product
.save()
.then(result => {
console.log(result)
})
.catch(err => {
console.log(err)
})
}
exports.getMyproducts = (req, res, next) => {
userid = req.cookies.logininfo.userid
}
exports.getEditproduct = (req, res, next) => {
productID = parseInt(req.params.productID)
}
exports.postEditproduct = (req, res, next) => {
prodname = req.body.name
proddesc = req.body.desc
prodcategory = req.body.category
prodprice = parseInt(req.body.price)
productID = req.params.productID
}
exports.deleteproduct = (req, res, next) => {
}
exports.getProduct = (req, res, next) => {
productID = req.params.productID
}
exports.getProductreviews = (req, res, next) => {
}
exports.getCreatereview = (req, res, next) => {
res.render('createreview')
}
exports.postCreatereview = (req, res, next) => {
review = req.body.review
productID = parseInt(req.params.productID)
const d = new Date()
reviewdate = reviewdate.concat(d.getDate().toString(), "-", (d.getMonth() + 1).toString(), "-", d.getFullYear().toString())
models/products.js:
const getDb = require('../util/database').getDb
class product {
constructor(prodname, proddesc, prodcategory, prodprice, userid) {
this.prodname = title
this.proddesc = price
this.prodcategory = description
this.prodprice = imageUrl
this.userid = userid
}
save() {
const db = getDb()
return db.collection('products')
.insertOne(this)
.then(result => {
console.log(result)
})
.catch(err => {
console.log(err)
})
}
}
module.exports = product
util/database.js:
const mongodb = require('mongodb')
const mongoclient = mongodb.MongoClient
let _db
const mongoconnect = callback => {
mongoclient
.connect('mongodb+srv://user1:aa@cluster0.z0jq8.mongodb.net/shop?retryWrites=true&w=majority')
.then(client => {
console.log("connected!")
_db = client.db()
callback()
})
.catch(err => {
console.log(err)
})
}
const getDb = () => {
if(_db)
return _db
throw 'No Database Found!'
}
exports.mongoconnect = mongoconnect
exports.getDb = getDb
答案 0 :(得分:0)
不要在你的路由中调用该函数,而是将其作为
router.delete('/delete/:productID', isseller, product.deleteproduct) //Without ()