Fix homepage API 500 by using axios baseURL and stable paginate.
deploy to danak / build_and_deploy (push) Has been cancelled
deploy to danak / build_and_deploy (push) Has been cancelled
Replace self-proxy with direct SSR baseURL, rewrite blog post pagination with async/await, pin mongoose-paginate-v2, and add API error logging. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+5
-6
@@ -72,11 +72,10 @@ export default {
|
||||
},
|
||||
|
||||
axios: {
|
||||
proxy: true
|
||||
},
|
||||
proxy: {
|
||||
// SSR axios requests must hit the same Nuxt process that hosts serverMiddleware (/api).
|
||||
'/api': { target: `http://127.0.0.1:${nuxtPort}` }
|
||||
// SSR calls the integrated Express API directly; browser uses relative /api paths.
|
||||
proxy: false,
|
||||
baseURL: `http://127.0.0.1:${nuxtPort}`,
|
||||
browserBaseURL: '/'
|
||||
},
|
||||
router: {
|
||||
linkActiveClass: 'active-link',
|
||||
@@ -85,7 +84,7 @@ export default {
|
||||
serverMiddleware: ['~/server/index.js'],
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
port: 3000
|
||||
port: nuxtPort
|
||||
},
|
||||
|
||||
auth: {
|
||||
|
||||
Generated
+3
-21
@@ -12522,21 +12522,6 @@
|
||||
"url": "https://opencollective.com/mongoose"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose-lean-virtuals": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/mongoose-lean-virtuals/-/mongoose-lean-virtuals-1.1.1.tgz",
|
||||
"integrity": "sha512-8chOqpVE3bcoWT2pIgcJeIZlXaOfQCavZgQZF4qytUtjRBqsNMyzUoR16qdw9XL2kC478N8iA8z0AA+NSS0d1A==",
|
||||
"license": "Apache 2.0",
|
||||
"dependencies": {
|
||||
"mpath": "^0.8.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.20.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"mongoose": ">=5.11.10"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose-legacy-pluralize": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
|
||||
@@ -12547,13 +12532,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose-paginate-v2": {
|
||||
"version": "1.9.5",
|
||||
"resolved": "https://registry.npmjs.org/mongoose-paginate-v2/-/mongoose-paginate-v2-1.9.5.tgz",
|
||||
"integrity": "sha512-sgPbV0G7SfdW1XdEuNMokzJOT85GNx786itp6UiNmDvKGyxMSHbeyn4tMZBseOmGu2uOo5ByVgfjhaxkOBY71A==",
|
||||
"version": "1.3.18",
|
||||
"resolved": "https://registry.npmjs.org/mongoose-paginate-v2/-/mongoose-paginate-v2-1.3.18.tgz",
|
||||
"integrity": "sha512-MTEyXvQmUNlXyPGophxILHTYQQ80r3uMtgdnKVr+4qgWLM6JxHbWsFpCmaJJ7ofuV7bhkfBTGx3EDoJo+bIKFw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mongoose-lean-virtuals": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
|
||||
@@ -1030,7 +1030,12 @@ export default {
|
||||
blogPosts: blogPosts.data
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Homepage asyncData failed:', e.message || e)
|
||||
console.error('Homepage asyncData failed:', {
|
||||
url: e.config?.url,
|
||||
status: e.response?.status,
|
||||
data: e.response?.data,
|
||||
message: e.message
|
||||
})
|
||||
error({ statusCode: 500, message: 'there is a problem here' })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,25 +112,39 @@ module.exports.getAll = [
|
||||
// '/api/public/blogPosts?limit=4' --> gets only 4 published post of all categories
|
||||
// '/api/public/blogPosts?category=${encodeURIComponent(categoryTitle)}&page=${pageNumber}' --> gets posts depend on the category title and in chunked data
|
||||
|
||||
if (req.query.category) {
|
||||
try {
|
||||
const categoryID = await BlogCategory.findOne({$or: [{'locale.fa.title': req.query.category}, {'locale.en.title': req.query.category}]})
|
||||
const filter = req.query.category === 'all' ? {published: true} : {published: true, category: categoryID._id}
|
||||
BlogPost.paginate(filter, {page: req.query.page, limit: blogPaginateLimit, populate: 'category', sort: {_id: -1}}, (err, posts) => {
|
||||
if (err) return res500(res, {message: _sr['fa'].not_found.item_id})
|
||||
return res.json(posts)
|
||||
try {
|
||||
if (req.query.category) {
|
||||
const filter = {published: true}
|
||||
if (req.query.category !== 'all') {
|
||||
const category = await BlogCategory.findOne({
|
||||
$or: [
|
||||
{'locale.fa.title': req.query.category},
|
||||
{'locale.en.title': req.query.category}
|
||||
]
|
||||
})
|
||||
if (!category) return res404(res, _sr['fa'].not_found.item_id)
|
||||
filter.category = category._id
|
||||
}
|
||||
const posts = await BlogPost.paginate(filter, {
|
||||
page: Number(req.query.page) || 1,
|
||||
limit: blogPaginateLimit,
|
||||
populate: 'category',
|
||||
sort: {_id: -1}
|
||||
})
|
||||
} catch (e) {
|
||||
return res500(res, e)
|
||||
return res.json(posts)
|
||||
}
|
||||
} else {
|
||||
let query = {published: true}
|
||||
|
||||
const query = {published: true}
|
||||
if (req.query.getAll) delete query.published
|
||||
const limit = Number(req.query.limit) || false
|
||||
BlogPost.find(query).sort({_id: -1}).limit(limit).populate('category').exec((err, posts) => {
|
||||
if (err) return res500(res, err)
|
||||
else return res.json(posts)
|
||||
})
|
||||
const limit = Number(req.query.limit) || 0
|
||||
const posts = await BlogPost.find(query)
|
||||
.sort({_id: -1})
|
||||
.limit(limit)
|
||||
.populate('category')
|
||||
return res.json(posts)
|
||||
} catch (e) {
|
||||
console.error('blogPost getAll error:', e)
|
||||
return res500(res, e)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -25,6 +25,14 @@ app.use('/public', Public)
|
||||
app.use('/auth', auth)
|
||||
app.use('/admin', isAdmin, admin)
|
||||
|
||||
app.get('/health', (req, res) => {
|
||||
res.json({ ok: true })
|
||||
})
|
||||
|
||||
app.use((err, req, res, next) => {
|
||||
console.error('Express error:', req.method, req.originalUrl, err?.message || err)
|
||||
res.status(500).json({ message: err?.message || 'Internal Server Error' })
|
||||
})
|
||||
|
||||
// Export the server middleware
|
||||
module.exports = {
|
||||
|
||||
@@ -3,7 +3,8 @@ module.exports.res404 = (res, err) => {
|
||||
}
|
||||
|
||||
module.exports.res500 = (res, err) => {
|
||||
return res.status(500).json({message: err})
|
||||
console.error('API 500:', err?.message || err)
|
||||
return res.status(500).json({message: err?.message || err})
|
||||
}
|
||||
|
||||
module.exports.checkValidations = validationResult => {
|
||||
|
||||
Reference in New Issue
Block a user