【问题标题】:express-flash-notification shows error "No default engine was specified and no extension was provided"express-flash-notification 显示错误“未指定默认引擎且未提供扩展名”
【发布时间】:2017-10-04 07:47:42
【问题描述】:

我是 node.js 的新手,我在我的项目中使用 MEAN。在我的项目中,我可以在页脚处选择“订阅电子邮件”。由于页脚,我不能使用 Angular 来发送消息(我没有任何控制器)。使用普通 node.js 我需要显示 flash 消息。

这是我的代码 server.js

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var session = require('express-session');
var flash           = require('express-flash-notification')
var cookieParser    = require('cookie-parser')



app.use(cookieParser("hash"));   
app.use(session({secret:"hash", cookie: { maxAge: 60000 }, resave: true, saveUninitialized: true }))

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use(express.static('public'));

app.use(flash(app));
app.use(express.static(__dirname + '/client'));
app.use('/admin', express.static(__dirname + '/admin'));

app.use('/', express.static(__dirname + '/client', { redirect: false }));



app.post('/subscribe', function (req, res)
 {
    if(req.body.name == 'aathirag@gmail.com') 
    {
        //return console.log(error);
        //res.send(200);
        req.flash('info', 'Thank you', 'home')

    }
    else
    {
        res.send(500);
    }





});




app.listen(3000, function(){
    console.log('server is running on port 3000..');
});

和html文件

<!DOCTYPE html>
<html lang="en">

<body>
    <!-- footer -->
<div>
<form action="/subscribe" method="POST">

    <input name="name" id="name" type="text"  placeholder="Enter your email address" /><input type="submit" name="submit" id="submit" class="newsletter-submit" />


</form>
</div>

</body>
</html>

这显示错误“未指定默认引擎且未提供扩展”。

如何解决这个问题以及如何在 html 页面中显示消息。我试过了

{{info}} 

但它不起作用

谢谢

【问题讨论】:

标签: node.js flash express


【解决方案1】:

你缺少视图引擎,例如使用jade:

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

如果您想使用对 html 友好的语法,请改用 ejs 并将您的 html 文件保存为 .ejs 扩展名。

app.engine('html', require('ejs').renderFile); app.set('view engine', 'html');

然后在路由定义之前使用 res.locals 变量渲染你的 flash 变量,就像在中间件中一样:

res.locals.info = req.flash.info;

现在这个 {{info}} 变量直接通过 res.locals 对象使用。

【讨论】:

  • 有没有其他不用jade或ejs的方法可以使用
【解决方案2】:

我通过ajax请求解决了

<form onsubmit="submit()" method="POST">

    <input name="name" id="name" type="text"  placeholder="Enter your email address" />
<input type="submit" name="submit" id="submit" class="newsletter-submit" />


</form>
<label id="results" class="success" style="display: none;"></label>

Ajax 调用

function submit()
  {
     var parameters = { search: $('#name').val() };
       $.post( '/subscribe',parameters, function(data)
       {
         $('#results').html(data);
     });
  } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2014-06-29
    • 2019-01-16
    • 2013-09-02
    • 2021-03-21
    • 2022-12-18
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多