我是Node js的新手,我正在构建一个用于学习目的的应用程序。
我陷入了困境,必须显示/隐藏成功和错误消息。
这里我在节点js中使用了jquery插件。
下面是代码:
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
global.jQuery = require('jquery')(window);
global.$ = global.jQuery;
注册代码:
doRegistration : (req , res) => {
let email = req.body.email;
let password = req.body.password;
let name = req.body.name;
let confirm_password = req.body.confirm_password;
let encryptedString = cryptr.encrypt(req.body.password);
if(email== '' || password == '' || name =='' || confirm_password =='')
{
message = "Fields are empty";
let list2 = [];
list2.name = '';
list2.email = '';
if(name!='')
{
list2.name =name;
}
if(email!='')
{
list2.email = email;
}
req.flash('error', message);
setTimeout(function(){ $("#err").hide(); },3000); //not working
res.locals.message = req.flash();
res.render('registration.ejs' ,{
code : '204',
title: "Registration",
details :list2,
});
}
}
setTimeout(function(){$(“#err”)。hide();},3000);已添加此代码以隐藏错误消息。错误消息未隐藏。
我的代码有什么问题吗? 请提出建议。 谢谢
答案 0 :(得分:1)
您有一堆代码(在您的第一个代码块中)设置了DOM和jQuery。您似乎从来没有用任何数据填充文档,但这不是您的最大问题。
在您的注册码中,您收集一些数据,将其注入registration.ejs
中,然后将结果发送给客户端。
三秒钟后(此时HTTP请求已完成,并且浏览器已发送了所发送的内容),您调用了jQuery函数。此功能可在任何global.document
上运行。
global.document
似乎与registration.ejs
没有任何关系,即使这样做,它也将更改服务器上当前的内容,而不会触及浏览器上的任何内容。
您无法编写可以追溯到过去的服务器端JS,并更改三秒钟前服务器发送给浏览器的内容。
您可以在模板文件中包含<script>
元素,然后运行jQuery 客户端。
您不能编写服务器端代码来启动与浏览器的连接(HTTP与浏览器一起启动与请求的通信,服务器提供响应)告诉服务器显示一个改为使用其他文档。
您可以使用WebSocket(或类似Comet或polling的不太优雅的方法),以便当页面在浏览器中加载时会启动与服务器的连接,然后向浏览器发送信号以运行某些客户端-隐藏元素的辅助代码。您仍然需要使用客户端代码进行隐藏,这仅允许您确定服务器上发生的何时。如果您只想稍等片刻,则不需要任何复杂的事情。