使用AngularJS和NodeJS从MySQL检索数据

时间:2017-06-22 18:58:46

标签: javascript mysql angularjs node.js electron

首先,或许我需要澄清一下,我是这种技术的新手。我从PHP迁移到JavaScript,我以前从未做过这种工作。我正在使用Electron + AngularJS制作桌面应用程序。我有一个简单的表,我需要显示获取的MySQL表数据。查看信息我找到了一个使用NodeJS的简单方法,但是我将检索到的数据存储到$ scope后面有问题,用ng-repeat指令显示。我的代码(简称):

app.controller('registrosController', function($scope, $http) {
    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: null,
        database: 'dniscan'
    })
    connection.connect((err) => {
        if(err){
            return console.log(err.stack);
        }
    })
    $queryString = 'SELECT * FROM registros ORDER BY escaneado DESC';
    connection.query($queryString, (err, data) => {
        if(err) {
            return console.log("Ocurrió un error durante la consulta", err)
        }
        console.log(data)       //The data shows correctly in the console.
        $scope.registros = data //This not working. It returns undefined.
    });
    connection.end();
});

3 个答案:

答案 0 :(得分:1)

似乎你正在混淆客户端和服务器,所以为了澄清,在服务器中你从db获取数据。在客户端中,您将数据放在范围上。然后在HTML中,您将范围中的数据放在视图中。

以下是一个例子:

  

服务器 - NodeJs

app.get('getData', function (req, res) {
    var mysql = require('mysql');
    var connection = mysql.createConnection({ ... });
    connection.connect((err, connection) => {
        if(err) { 
            res.send({ err }) 
        } else {
            var queryString = 'SELECT * FROM ...';

            connection.query(queryString, (err, data) => {
                if(err) { 
                    res.send({ err }) 
                } else {
                    res.send({ data });
                }
            });
        }
    });
    connection.end();
});
  

客户 - AngularJs

app.controller('registrosController', function($scope, $http) {
    $http.get('/getData').then(function(data) {
        $scope.registros = data;
    });
});
  

客户端 - Html

<div ng-repeat="registro in registros">
    ...
</div>

P.S。在javascript中,您没有通过使用$附加变量来定义变量,而是使用单词var

答案 1 :(得分:0)

您不能在浏览器中使用mysql。您正在运行的代码适用于Node(它是服务器端平台),它将访问您的(服务器)的mysql并在那里存储数据。

如果您想在浏览器中存储一些持久性数据,最好的方法是使用HTML5的本地存储或会话存储,并且在用户删除它们之前可以访问它们。

但是如果你真的想使用数据库,我不推荐。有一些轻型数据库可供使用。

从我的搜索中我可以找到角度的sqlite包: - https://github.com/reduardo7/angular-sqlite

你也可以使用indexddb这是基于文档的数据库: - https://github.com/webcss/angular-indexedDB

答案 2 :(得分:-2)

您应该使用angular.copy将数据移动到$ scope.registros

$scope.registros = angular.copy(data)