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

Send data back to node.js server from front-end

我是 Node.js 的新手,几天来我一直在努力弄清楚如何使用 Express.js 和 EJS 模板引擎以及 MySql.

我已经在我的电脑上安装了 Node,我已经使用 Express-Generator 制作了一个基本的文件夹结构(视图、路由、public 个文件夹)。

我了解如何使用 ejs 将变量从节点传递到前端,但我不知道如何将其传回。我试过在互联网上观看一些教程,但似乎没有什么能让我明白其中的逻辑。 MySql 代码放在哪里?如何在用户单击 "SUBMIT" 后传回输入值?

您将不得不使用某种 AJAX 库(或 vanilla js ajax)将信息发送到您在 express 中设置的 http 端点。对于简单的东西,jquery ajax 方法就可以了。您可能希望提出 POST 请求。

至于 MySql 代码,请查看 Sequelize。它是一个很酷的库,用于与来自 express 的 sql 数据库进行交互。它类似于 mongoose 对 mongo.

的工作方式

Jake 怎么说,我建议对 MySQL 使用 Sequelize

我会尝试为您做一个小步骤,之后您可以详细了解每个过程和工具。

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>

在这里,表单将请求 route 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;
};

在这一点上,执行查询以验证登录并验证用户是否可以登录。Request方法是重点。

为了响应和发送信息查看,它使用了res.SOME_METHOD:

res.send();

res.end();

res.download();

res.json();

加:续集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
    },
});

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