新手报道-NodeJS开发指南的博客(Nodejs)

新手报道-NodeJS开发指南的博客(Nodejs)

终于搞定一大半了,完全没按照书上的思路走。书上的路一走一个死,req,flash()这个东西还是无法使用,求解释。

“express”: “~3.4.8”, “static-favicon”: “~1.0.0”, “morgan”: “~1.0.0”, “cookie-parser”: “~1.0.1”, “body-parser”: “~1.0.0”, “debug”: “~0.7.4”, “ejs”: “~0.8.5”

这是各个的版本号,数据库我用的Mysql

7 回复

新手报道-NodeJS开发指南的博客(Nodejs)

大家好,我是刚刚开始学习Node.js的新手。最近在尝试构建一个简单的Web应用,并遇到了一些问题。尽管我参考了一些书籍和教程,但发现直接照搬书中的代码并不能很好地运行。特别是在使用req.flash()时遇到了困难,希望有经验的朋友能给我一些指导。

首先,介绍一下我的项目环境:

{
  "dependencies": {
    "express": "~3.4.8",
    "static-favicon": "~1.0.0",
    "morgan": "~1.0.0",
    "cookie-parser": "~1.0.1",
    "body-parser": "~1.0.0",
    "debug": "~0.7.4",
    "ejs": "~0.8.5"
  }
}

另外,我使用的数据库是MySQL。接下来,我会分享一下我在项目中遇到的一些问题以及解决方法。

问题一:req.flash()无法使用

在Express 3.x版本中,req.flash()并不是默认支持的功能。要使用Flash消息,你需要安装额外的中间件,比如connect-flash。以下是如何安装并配置它的步骤:

  1. 安装connect-flash

    npm install connect-flash --save
    
  2. 在你的Express应用中引入并配置connect-flash

    var express = require('express');
    var flash = require('connect-flash');
    var app = express();
    
    // 使用中间件
    app.use(flash());
    
    // 示例:在路由中设置Flash消息
    app.get('/login', function(req, res) {
      req.flash('error', '用户名或密码错误!');
      res.redirect('/');
    });
    
    // 在视图中显示Flash消息
    app.get('/', function(req, res) {
      res.render('index', { messages: req.flash('error') });
    });
    
    app.listen(3000);
    
  3. 在视图文件(例如EJS模板)中显示Flash消息:

    <% if (messages && messages.error) { %>
      <div class="alert alert-danger">
        <%= messages.error %>
      </div>
    <% } %>
    

通过上述步骤,你就可以在Express 3.x应用中使用Flash消息功能了。

希望这些信息对你有所帮助!如果你还有其他问题,欢迎继续交流。


说一个我做的时候碰到flash不能用的情况吧:

app.set('view engine', 'ejs');
app.use(flash());

flash这个middleware 必须放在view engine后面,之后跟body parse什么的

当然最重要的是,dependencies里面别忘了

"connect-flash": "*"

已经安装了connect-flash,添加了app.use(flash())

index.ejs里面是 req.flash(“error”,“错误”); 通过res.locals.error=req.flash(“error”)什么出来的都没值; 如果是res.locals.error="错误"就能行,显示的是什么 req.flash.什么 session

编码问题吗? 把错误这个中文换成error英文试试

还是不行,我应该知道什么原因了,index里面的,res.render(“index”,{ title:“xxxx”, error:这个地方应该有个初始值吧? })

谢谢了哈

   res.render('index', {
            title: 'Home Page',
            user: req.session.user,
            posts: posts,
            success: req.flash('success').toString(),
            error: req.flash('error').toString()
        });

你好!看起来你在使用较旧版本的 Express 和相关中间件时遇到了一些问题。以下是针对你的问题的一些解释和示例代码。

关于 req.flash()

req.flash() 是一个流行的中间件 connect-flash 提供的功能。这个功能通常用于在用户请求之间临时存储消息,例如登录成功或失败的消息。如果你没有安装 connect-flash,那么 req.flash() 将不可用。

安装 connect-flash

你可以通过以下命令安装 connect-flash

npm install connect-flash@0.1.1

使用 connect-flash

首先,你需要在应用中设置 connect-flash 中间件。然后在路由中使用 req.flash() 来存储和获取消息。

var express = require('express');
var flash = require('connect-flash');
var app = express();

// 设置中间件
app.use(express.static('public'));
app.use(express.urlencoded({ extended: false })); // 解析 URL 编码的数据
app.use(flash());

// 示例路由
app.get('/login', function(req, res) {
    res.render('login'); // 渲染登录页面
});

app.post('/login', function(req, res) {
    // 假设验证通过
    req.flash('success', '登录成功!');
    res.redirect('/'); // 重定向到首页
});

app.get('/', function(req, res) {
    res.send('<h1>首页</h1><br>' + 
             '<div>' + (req.flash('success') || '') + '</div>');
});

在这个例子中,我们设置了 connect-flash 中间件,并在 /login 路由处理程序中使用 req.flash() 存储一条成功消息。然后在首页上显示该消息。

数据库连接

对于 MySQL 数据库连接,你可以使用 mysql 模块。这是一个简单的示例:

var mysql = require('mysql');

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'yourusername',
  password : 'yourpassword',
  database : 'yourdatabase'
});

connection.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

module.exports = connection;

总结

确保你已经正确安装并配置了所有需要的中间件和模块。如果你仍然遇到问题,请检查是否有任何错误信息,并根据这些信息进行调试。希望这对你有所帮助!

回到顶部