如何将一个警报从Node.JS发送到Javascript客户端?

时间:2018-12-26 17:28:26

标签: javascript node.js

我正在使用mysql从我的node.js中进行基本登录。

在我的代码示例中,如果会话正确,请将我发送到一个名为“ home”的html页面,但是在这种情况下,我需要在完成会话后,我的Javascript客户端发送一条警报,告知您已登录或者其用户不正确。如果正确,请将“正确”一词保存在以后可在我的javascript文件中使用的变量中

我如何发送执行信息,以便我的javascript文件发送警报?

office::office(building *b, int on, int m): office_number(on),  current_visitors(0), _f(m){
  No = b->get_space_size('o');
  cout << "Office number: " << office_number << "\thas been created\n";
}

int office::get_vis_count() const{
  return current_visitors;
}

int office::has_space() const{
  return (current_visitors < No);
}

int office::get_numb() const{
  return office_number;
}

int office::__enter(Visitor * visitor){
  if(visitor == NULL) return -1;
  if(has_space()){
    if(!visitor->__done()){
        if((visitor->get_office() == office_number)){
            visitors.push_back(visitor);
            cout << "Entering office " << _f << "-" << office_number << "\t: ";
            visitors[current_visitors]->print_v();
            current_visitors++;
            return 1;
        }else{
            return 0;
        }
    }else{
        return 1;
    }
}else{
    cout << "Please, wait outside for entrance in office number: " <<   office_number << endl;
    return 0;
  }
}

Visitor* office::__exit(int index){
  if (visitors[index]->__done()){
    Visitor *nav;
    nav = visitors[index];
    visitors.erase(visitors.begin() + index);
    current_visitors--;
    return nav;
  }else{
    return NULL;
  }
}

Visitor* office::done(){
  if(current_visitors){
    int random;
    random = rand() % current_visitors;
    visitors[random]->__set_done();
    cout << "Exiting office " << _f << "-" << office_number << "\t: ";
    visitors[random]->print_v();
    return __exit(random);
  }else{
    return NULL;
  }
}

void office::print() const{
    if(current_visitors != 0){
      cout << "Floor: " << _f << endl;
      cout << "Office: " << office_number << endl;
      for (int i = 0; i < No; i++)
      {
        visitors[i]->print_v();
      }
      cout << endl;
}
} 

office::~office(){
    cout << "End of the work!\n";
 }

谢谢

3 个答案:

答案 0 :(得分:1)

这是您可以使用的肮脏技巧,但是它将重新渲染ejs视图:

在服务器端(使用express):

app.get('/route', function (req, res) {
    res.render('view', { errormessage: 'your message' });
});

在客户端(使用ejs模板):

1。在ejs模板上创建一个不可见的div,以访问服务器发送的ejs变量:

HTML:

  <div id='status' class='invisible'><%= errormessage %></div>

CSS:

.invisible {
display: none;
visibility: hidden;
   }

2。在ejs末尾添加此js脚本(jquery)以访问此变量并创建警报:

<script>
      if($('div#status').text()!='')
      {
                alert($('div#status').text());
      }
</script>

答案 1 :(得分:0)

无法通过从服务器发送指令直接在客户端执行代码。您要做的是发送信息,并在客户端上正确解释。

例如,您可以使用会话

if (results.length > 0) {
     request.session.loggedin = true;
     request.session.username = username;
     request.session.makeAlert = true;
     response.redirect('/home');
}

在/ home路线中

app.get('/home', function(req, res){
    const dataYouSend = {};
    if (req.session.makeAlert) dataYouSend.makeAlert = true;
    res.send(dataYouSend);
});

最后在/ home路由中的JS代码中,使用您的数据

fetch('adress/to/your/home')
.then(response => {
     // It may not be precisely this, I don't know how you send data
  if (response.makeAlert) alert("Alert!!!");
})
.catch(err => {
    if(err) console.log(err);
});

答案 2 :(得分:0)

在服务器端(Express中间件):

if(userNotExist) return res.status(401).end('Incorrect Username and/or Password!');

在客户端处理。

角度:-

$http().....
.error(function(data, status) {
  console.error('Repos error', status, data);//"Repos error" 500 "User already exists."
});

jQuery:-

$.ajax({
    type: "post",
    url: url,
    success: function (data, text) {
        //success code here.
    },
    error: function (request, status, error) {
        //error handling here.
    }
});