【问题标题】:Sending alert from the client side based on the response from server根据服务器的响应从客户端发送警报
【发布时间】:2018-06-20 21:03:09
【问题描述】:

我使用 express.js 作为服务器端,使用纯 JavaScript 作为客户端。在注册路线中,我只想添加尚未注册的用户。如果已经注册,我想要一条警告消息“用户已经注册”。在注册路由中表单的提交按钮之间重定向到 /users/add 路由。这是/users/add 路线...

app.post('/users/add', (req, res, next) => {
  user = {
    name: req.body.name,
    studentID: req.body.studentID,
    password: req.body.password
  }
  let count = 0;
  Users.find({}).toArray((err, users) => {
    if (err) {
      return console.log(err);
    }
    for (let i = 0; i < users.length; i++) {
      if (users[i].studentID == user.studentID)
        count++;
    }
    // Add user if not already signed up
    if (count == 0) {
      Users.insert(user, (err, result) => {
        if (err) {
          return console.log(err);
        }
        console.log('User added...');
        res.redirect('/');
      });
    } else {
      // Alert message logic here
    }
  });

如何使用纯 JavaScript 实现这一点? 谢谢...

【问题讨论】:

  • 不是重定向到/,而是渲染索引视图并传递一个错误参数。在您的视图中,检查错误并显示它。
  • 你需要这样的东西:res.render('login', { error: "user already exists" }); 另外,使用纯 JavaScript 并不妨碍你使用 AJAX 发送表单。

标签: javascript jquery node.js express


【解决方案1】:

只需向客户端发送一条消息,例如“用户存在”。当客户端收到时,alert("The user already exists").

if(users.length){
    res.status(409).send("user exists")
}

在你的前端,无论你使用什么框架:

if(response=="user exists") alert("The user already exists")

顺便说一句,您不需要 count 变量。你只计算users.length。直接使用users.length

另外,这段代码有一个缺陷:

if (err) {
    return console.log(err);
}

您在没有回复客户端的情况下退出函数,因此您的 HTTP 调用将永远挂起并导致超时。您必须始终回复客户:

if (err) {
      console.log(err);
      return res.status(500).send(err);
}

【讨论】:

  • 这假定表单是使用 AJAX 发送的,但我怀疑不是。
  • 如果不是 Ajax,你怎么称呼 Nodejs 路由?这显然是对/users/add 路由的 POST 请求
  • 它是在提交&lt;form action="/users/add" method="post"&gt; 时生成的。后端语言无所谓,使用node.js不代表客户端是SPA。
  • 啊,那就有问题了。我们需要编写一个.onsubmit() 处理程序。我太习惯 Angular 的 http 调用了。
  • 在 angular 中根本不是问题。工作正常 。但是使用普通的 javascript 会很棘手
猜你喜欢
  • 1970-01-01
  • 2012-03-16
  • 2018-10-12
  • 1970-01-01
  • 2015-07-01
  • 2014-09-07
  • 2015-11-29
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多