Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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_Alert_Connect Flash - Fatal编程技术网

Node.js 为什么是';消息';未定义有关连接闪存的信息?

Node.js 为什么是';消息';未定义有关连接闪存的信息?,node.js,express,alert,connect-flash,Node.js,Express,Alert,Connect Flash,我正在构建一个express应用程序,当用户填写表单时;如果成功,他们将看到确认其提交的警报 在我的server.js文件中,我声明 var cookieParser = require("cookie-parser"), session = require("express-session"), flash = require("connect-flash"), app = express(); 其次是: app.use(cookieParser("keyboard cat")); app.

我正在构建一个express应用程序,当用户填写表单时;如果成功,他们将看到确认其提交的警报

在我的server.js文件中,我声明

var cookieParser = require("cookie-parser"),
session = require("express-session"),
flash = require("connect-flash"),
app = express();
其次是:

app.use(cookieParser("keyboard cat"));
app.use(session({ 
    cookie: { maxAge: 60000 },
    secret: "keyboard cat" 
}));
app.use(flash());
require("./server/config/routes.js")(app);`
我的路由文件:

app.get("/", function(req, res){
    res.render("index", { message: req.flash("success") });
});

app.post("/sendMsg", function(req, res){
    mainController.sendMsg(req, res);
});

app.get("/sentSuccess", function(req, res){
    req.flash("success", "Thanks!");
    res.redirect("/");
});
最后,在jquery调用的main.js文件中(我使用SweetAlert进行警报样式设置):

我遇到的问题是
uncaughtreferenceerror:message未在客户端控制台上定义。我已经通读并查看了上的示例,但我不确定消息为什么没有被传回。

添加一个中间件:

app.use(flash());
app.use(function(req, res, next){
  res.locals.messages = req.flash();
  next();
});

然后在前端使用
消息
也许,问题在于代码试图访问
消息
变量的方式。正如@Pushkin所说的,
消息
将被传递到视图中,因此不能被javascript引用

您可以试试这个(如果您使用jade作为查看引擎)

最后,代码如下所示:

if message
    .script
        var frm = document.getElementsByName('msgForm')[0];
            swal({
                title: "Sweet!",
                text: "Thanks",
                imageUrl: "javascripts/sweetalert/thumbs-up.jpg"
            });
            frm.reset(); 
现在,您将能够访问
消息
变量

如果使用
ejs
,语法几乎相似

<% if (message) { %>
 // Do something here..
<% } %>  

//在这里做点什么。。

根据它看起来像
消息
将被传递到视图。您可能需要先用JQuery选择元素,然后再引用它。看起来@trquockung或多或少有正确的方法。再见,谢谢!完全是这样。我正在使用ejs,所以我必须在
中包装一个脚本标记和函数。然而,我遇到了另一个问题,因为我的索引路由通过了
消息:req.flash(“success”)
它会自动启动脚本。我的修复方法是添加以下内容:
消息:“undefined”
;然后将实际的req.flash(“success”)参数移动到我的app.get(“/sentsucces”)路径,并使其具有
res.render(“index”,{message:req.flash(“success”)})最后在我的索引视图加载项上:
if message
    .script
        var frm = document.getElementsByName('msgForm')[0];
            swal({
                title: "Sweet!",
                text: "Thanks",
                imageUrl: "javascripts/sweetalert/thumbs-up.jpg"
            });
            frm.reset(); 
<% if (message) { %>
 // Do something here..
<% } %>