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

Posted

技术标签:

【中文标题】从前端将数据发送回 node.js 服务器【英文标题】:Send data back to node.js server from front-end 【发布时间】:2016-01-12 23:05:49 【问题描述】:

我是 Node.js 的新手,几天来我一直在尝试弄清楚如何使用 Express.js 和 EJS 模板引擎和 mysql 为网站制作一个简单的登录注册功能。

我已经在我的 PC 上安装了 Node,并使用 Express-Generator 创建了一个基本的文件夹结构(视图、路由、公共文件夹)。

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

【问题讨论】:

【参考方案1】:

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();

另外: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 主要是response、Sequelize和sequelize.query的docs,基于问题。 请看这里:link【参考方案2】:

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

至于 MySql 代码,请查看 Sequelize。它是一个很酷的库,用于与 express 的 sql 数据库进行交互。它类似于 mongoose 为 mongo 工作的方式。

【讨论】:

没有 AJAX 就不可能吗?像在 php 中一样? 我不知道。这可能是可能的,但 AJAX 被广泛接受为使用 express 执行此类操作的方式。看来您必须在为 express 服务器提供服务的地方提供前端服务,几乎就像一个 rails 应用程序。

以上是关于从前端将数据发送回 node.js 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Node JS 推送服务器发送/接收

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

c# SocketIoClientDotNet, node js socket.IO

如何在 webhook 触发的函数运行后将信息发送回前端?

使用带有快递的帖子:我想从用户那里接收数据,然后用新文件将该数据发送回用户