Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 获取连接闪存包以呈现闪存消息_Node.js_Express_Npm_Connect Flash - Fatal编程技术网

Node.js 获取连接闪存包以呈现闪存消息

Node.js 获取连接闪存包以呈现闪存消息,node.js,express,npm,connect-flash,Node.js,Express,Npm,Connect Flash,我正在通过练习学习expressjs和mongodb。 我想在添加、更新或删除新项目时呈现flash消息。虽然我也没有收到任何错误,但它不起作用,所以很难找出确切的原因。以下是我的主要代码: const express = require('express'); const exphbs = require('express-handlebars'); const methodOverride = require('method-override'); //dynamically overrid

我正在通过练习学习expressjs和mongodb。 我想在添加、更新或删除新项目时呈现flash消息。虽然我也没有收到任何错误,但它不起作用,所以很难找出确切的原因。以下是我的主要代码:

const express = require('express');
const exphbs = require('express-handlebars');
const methodOverride = require('method-override'); //dynamically overrides     post when it's time to PUT (update)
const flash = require('connect-flash');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const app = express();

//Load routes
const ideas = require('./routes/ideas');
const users = require('./routes/users');

//connect to mongoose
mongoose.connect('mongodb://localhost/vidjot-dev')
.then(()=>console.log('MongoDB Conneced....'))
.catch(err => console.log(err));

//handlebars Middleware
app.engine('handlebars', exphbs({
defaultLayout: 'main'
}));

app.set('view engine', 'handlebars');

//Body parser middleware - allows us to access whatever is submitted from     the form of the request object
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//method Override middleware
app.use(methodOverride('_method'));




app.use(cookieParser('secret'));
app.use(session({cookie: { maxAge: 60000 }}));
app.use(flash());


//Index Route
app.get('/', (req, res)=>{
const myTitle="Welcome Isaac S.";
res.render('INDEX', {
    title:myTitle
});
});

//About Route
app.get('/about', (req, res)=>{
res.render('ABOUT');
})

//use routes
app.use('/ideas', ideas);
app.use('/users', users);

//Use nodemon app to connect
const port = 5500;
app.listen(port, ()=> {
console.log(`Server started on port ${port}`);

/*Same as above which is ES6 */
//console.log('Server started on port '+port);
})
“routes.js”代码

const express = require('express');
const mongoose = require('mongoose');
const router = express.Router();

//Load Idea Model
require('../models/Idea');
const Idea = mongoose.model('ideas')

//Idea Index Page
router.get('/', (req, res) => {
Idea.find({}) //<== Returns all data
    .sort({date:'desc'})
    .then(ideas => {
        res.render('ideas/index', {                
            ideas:ideas
        });
    })
});

//Add Idea Form
router.get('/add', (req, res)=>{
res.render('ideas/add');
})

//Edit Idea Form
router.get('/edit/:id', (req, res)=>{
Idea.findOne({
    _id: req.params.id //passed in from the url   
})
.then(idea => { //<== returns single data queried for with above :id
    res.render('ideas/edit', {
    idea:idea
    });
  });
});

//Process Form
router.post('/', (req, res)=>{
let errors = [];

if(!req.body.title){
    errors.push({text:'Please add a title'});
}
if(!req.body.details){
    errors.push({text:'Please add somee details'});
}    

if(errors.length > 0){
    res.render('ideas/add', {
        errors: errors,
        title: req.body.title,
        details: req.body.details
    });
}else {
    const newUser = {
        title: req.body.title,
        details: req.body.details
    }
    new Idea(newUser)
        .save()
        .then(idea=> {
            req.flash('success_msg', 'Video idea added');
            res.redirect('/ideas');
        })
}
})

//Edit Form Process
router.put('/:id', (req, res) =>{
Idea.findOne({
    _id:req.params.id
})
.then(idea => {
    //new values
    idea.title = req.body.title;
    idea.details = req.body.details;

    idea.save()
        .then(idea => {
            req.flash('success_msg', 'Video idea updated');
            res.redirect('/ideas');
        })
});
});

//Delete Idea
router.delete('/:id', (req, res)=>{
Idea.remove({_id: req.params.id})
    .then(()=>{
        req.flash('success_msg', 'Video idea removed');
        res.redirect('/ideas');
    });
});

module.exports = router;
const express=require('express');
const mongoose=require('mongoose');
const router=express.router();
//负载概念模型
需要(“../models/Idea”);
const Idea=mongoose.model('ideas'))
//创意索引页
路由器.get(“/”,(请求,res)=>{
Idea.find({})//{
res.render('ideas/index',{
想法:想法
});
})
});
//添加想法表单
路由器.get('/add',(req,res)=>{
res.render(“想法/添加”);
})
//编辑想法表格
router.get('/edit/:id',(req,res)=>{
好主意,芬顿({
_id:req.params.id//从url传入
})
.then(idea=>{//{
让错误=[];
如果(!请求正文标题){
错误。推送({text:'请添加标题'});
}
如果(!请求正文详细信息){
错误。推送({text:'Please add some details'});
}    
如果(errors.length>0){
res.render('想法/添加'{
错误:错误,
标题:req.body.title,
详细信息:req.body.details
});
}否则{
常量newUser={
标题:req.body.title,
详细信息:req.body.details
}
新想法(新用户)
.save()
.然后(想法=>{
要求flash(“成功消息”,“添加视频创意”);
res.redirect(“/ideas”);
})
}
})
//编辑表单过程
路由器.put('/:id',(请求,res)=>{
好主意,芬顿({
_id:req.params.id
})
.然后(想法=>{
//新价值观
idea.title=req.body.title;
idea.details=req.body.details;
想法保存
.然后(想法=>{
要求flash(“成功消息”,“视频创意更新”);
res.redirect(“/ideas”);
})
});
});
//删除想法
路由器.delete('/:id',(req,res)=>{
Idea.remove({u id:req.params.id})
.然后(()=>{
要求flash(“成功消息”,“视频创意删除”);
res.redirect(“/ideas”);
});
});
module.exports=路由器;

这是我的回购协议。您似乎从未使用过闪存值。您需要将闪存消息传递给模板:

app.use(function(req, res, next) {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  next();
})

很抱歉,没有测试代码。我已编辑了我的答案。我已从github repo中取消对该块的注释,并将
local
更改为
locals
。这对我仍然不起作用。我收到此错误“无法设置未定义的属性“success\u msg”。它需要是我的路由文件吗?我会试试的。请确保将
res.local
更改为
res.locals
。它需要在app.js.Awesome中。这很有效。谢谢你!没有注意到细微差别。