如果车把不工作,我该怎么办?

时间:2020-12-28 06:16:17

标签: javascript node.js mongodb mongoose handlebars.js

(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 中使用每个命令时出现此错误。

1 个答案:

答案 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');
    });
});