首页 > 解决方案 > 我可以为每个不工作的车把做些什么?

问题描述

(node:10148) UnhandledPromiseRejectionWarning: TypeError: req.render is not a function at E:\desktop\Node.js learn project\node.jsBlog\nodejsBlogProject\routes\main.js:12:13 at processTicksAndRejections (internal/process/ task_queues.js:93:5)(node --trace-warnings ...用于显示警告的创建位置)(节点:10148)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志--unhandled-rejections=strict(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝 id:1)(节点:10148)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

主.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

应用程序.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}/`)
})

帖子.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 中的每个命令时出现此错误。

标签: javascriptnode.jsmongodbmongoosehandlebars.js

解决方案


在这条线上:

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

推荐阅读