(node:10148) UnhandledPromiseRejectionWarning: TypeError: req.render is not a function
在 E:\desktop\Node.js 学习项目\node.jsBlog\nodejsBlogProject\routes\main.js:12:13
在 processTicksAndRejections (internal/process/task_queues.js:93:5)
(使用 node --trace-warnings ...
显示警告的创建位置)
(node:10148) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。要在未处理的承诺拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict
(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1)
(节点:10148)[DEP0018] 弃用警告:不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。
main.js;
const express = require('express')
const router = express.Router()
const Post = require('../models/Post')
router.get('/', (req, res) => {
res.render('site/index')
})
router.get('/blog', (req, res) => {
Post.find({}).then(posts => {
req.render('site/blog', {posts:Post})
});
res.render('site/blog');
});
router.get('/contact', (req, res) => {
res.render('site/contact')
})
router.get('/about', (req, res) => {
res.render('site/about')
})
router.get('/login', (req, res) => {
res.render('site/login')
})
router.get('/register', (req, res) => {
res.render('site/register')
})
module.exports = router
app.js;
const path = require('path')
const express = require('express')
const exphbs = require('express-handlebars')
const app = express()
const port = 3000
const hostname = '127.0.0.1'
const mongoose = require('mongoose')
const bodyParser = require('body-parser')
mongoose.connect('mongodb://127.0.0.1/nodeblog_db', {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true
});
app.use(express.static('assets'))
app.engine('handlebars', exphbs())
app.set('view engine', 'handlebars')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
const main = require('./routes/main')
const posts = require('./routes/posts')
app.use('/', main)
app.use('/posts', posts)
app.listen(port , hostname, () => {
console.log(`server working now, http://${hostname}:${port}/`)
})
posts.js;
const express = require('express')
const router = express.Router()
const Post = require('../models/Post')
router.get('/new', (req, res) => {
res.render('site/addPost')
})
router.post('/test', (req, res) => {
console.log(req.body);
Post.create(req.body)
res.redirect('/')
})
module.exports = router
Post.js;
const mongoose = require('mongoose');
const PostSchema = new mongoose.Schema({
title: { type: String, require:true},
content: { type: String, require: true},
date: { type: Date , default: Date.now}
})
module.exports = mongoose.model('Post', PostSchema)
我使用 mongodb 作为数据库。当我尝试在 blog.handlebars 中使用每个命令时出现此错误。
答案 0 :(得分:0)
在这一行:
req.render('site/blog', {posts:Post})
您在应该是 req
的时候写了 res
。您传递给 posts
的值也不正确,您传递的是 Post
模型,但应该使用从回调中获得的 posts
。最后,您可能会调用 res.render
两次,一次是在回调函数中,一次是在之后。在失败的情况下调用它更有意义,例如数据库调用失败。
放在一起可能看起来像这样:
router.get('/blog', (req, res) => {
Post.find({}).then(posts => {
res.render('site/blog', { posts: posts });
}).catch(err => {
console.log(err);
res.render('site/blog');
});
});