从前端向node.js服务器发送数据

3

我是Node.js的新手,最近几天一直在试图使用Express.js和MySql制作一个简单的登录注册功能。

我已经在我的电脑上安装了Node,并使用Express-Generator创建了一个基本的文件夹结构(包括views、routes和public文件夹)。

我知道如何使用ejs将变量从node传递到前端,但我不知道如何将其传回。我尝试观看了一些网络教程,但似乎没有让我理解其中的逻辑。我应该把MySql代码放在哪里?当用户点击“提交”时,如何将输入值传回后台?

2个回答

3

请使用Sequelize来操作MySQL,这是Jake的建议。

我将为您提供一些入门步骤,之后您可以深入学习每个过程和工具。

1)前端(EJS);

  <form id="login" action="/login" method="post">
      <input name="username" type="text">
      <input name="password" type="password">
      <input type="submit">Ok</input>
  </form>

这里,表单将请求路由 login 。该路由为:

2) 路由

module.exports = function (app){
    
    var login = app.controllers.login;

    app.get('/', login.index);
    app.post('/login', login.login)
};

route将调用名为login.js的控制器中的login方法。

3)控制器

module.exports = function(app) {

  var sequelize = require('./../libs/pg_db_connect'); // resquest lib of connection to mysql/postgres

  var LoginController = {
    index: function(req, res) {
      res.render('login/index');
    },

    login: function(req, res) {    
      var query = "SELECT * FROM users"; // query for valid login
      
      sequelize.query(query, { type: sequelize.QueryTypes.SELECT}).then(function(user){    
             
        if (req.body.username == user[0].username  && req.body.password === user[0].password ){ 
            res.redirect("/home");     
          } else {
            res.render("login/invalid_access");
          }
         
      });

    }
  };
  return LoginController;
};

在这一点上,执行查询以验证登录并验证用户是否可以登录。 {{link1:请求}} 方法是主要的点。
为了响应并向视图发送信息,使用了 {{link2:res.SOME_METHOD}}:

res.send();

res.end();

res.download();

res.json();

附加:Sequelize MySQL 连接。

在 express 结构中,它位于 lib/my_db_connection.js 中:

var Sequelize = require('sequelize');
module.exports = new Sequelize('database_name', 'user', 'pass', {
    host: 'localhost',
    dialect: 'mysql',
    pool: {
        max: 10,
        min: 0,
        idle: 10000
    },
});

我建议在编写代码之前,先阅读必要的文档。


是的,你代码里有几个我不太理解的地方,但我真的很感激你的努力!+1 - Florin Pop
1
主要内容是基于问题的response,Sequelize和sequelize.query文档。 - BrTkCa
请查看这里:链接 - Florin Pop

1
您需要使用某种AJAX库(或原生js ajax)将信息发送到在express中设置的http端点。对于简单的操作,jquery ajax方法就足够了。您可能需要发起POST请求。
至于MySql代码,请查看Sequelize。这是一个很棒的库,可用于从express与sql数据库交互。它类似于mongoose用于mongo的工作方式。

这在没有AJAX的情况下是不可能的吗?就像在PHP中一样? - Florin Pop
1
据我所知,目前还没有这样的方法。虽然可能有,但是使用AJAX来处理这种情况已经被广泛接受。看起来你需要从同一个地方提供前端和express服务器,就像Rails应用程序一样。 - Jake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接