首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Famo.us连接到MySQL

Famo.us连接到MySQL
EN

Stack Overflow用户
提问于 2014-04-30 08:33:08
回答 2查看 694关注 0票数 0

我正试图通过MySQL连接一个Famo.us数据库。但我做不到。应用程序的文件夹结构如下所示:

  • app (实际famo.us应用程序)
    • 内容(图像等)
    • 钢筋混凝土
      • main.js (实际应用程序)
      • requireConfig.js

代码语言:javascript
复制
- styles
- grunt
- node\_modules

main.js

代码语言:javascript
复制
/*globals define*/
define(function(require, exports, module) {
    'use strict';
    // import dependencies
    var Engine = require('famous/core/Engine');
    var ImageSurface = require('famous/surfaces/ImageSurface');
    var StateModifier = require('famous/modifiers/StateModifier');

    // create the main context
    var mainContext = Engine.createContext();

    // your app here
    var logo = new ImageSurface({
        size: [200, 200],
        content: '/content/images/famous_logo.png'
    });

    var logoModifier = new StateModifier({
        origin: [0.5, 0.5]
    });

    mainContext.add(logoModifier).add(logo);
});

因为它运行在节点上,所以我试图成功地在node_modules文件夹中安装mysql node_modules。但是我无法连接到它,因为如果我试图在main.js中要求mysql带有require('mysql'),它认为我想尝试src文件夹中的js文件。我不能直接指向node_modules文件夹,因为它也给了我一个404错误,根据famo.us的文档,它不是这样做的。

因此,我试图以这种方式将mysql代码添加到main.js中,但它也不起作用: mysql节点:

代码语言:javascript
复制
require(['mysql'], function(mysql) {
    //foo and bar are loaded according to requirejs
    //config, but if not found, then node's require
    //is used to load the module.

    //Now export a value visible to Node.
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : 'test',
      database : 'app'
    });

    window.console.log(mysql);
});

requireConfig.js

代码语言:javascript
复制
/*globals require*/
require.config({
    nodeRequire: require,
    shim: {

    },
    paths: {
        famous: '../lib/famous',
        requirejs: '../lib/requirejs/require',
        almond: '../lib/almond/almond',
        'famous-polyfills': '../lib/famous-polyfills/index'
    }
});
require(['main']);

我之前没有将requireJS与Node结合使用,而且Famo.us非常新,所以他们还没有文档可以连接到mysql数据库。所以我很迷茫。有谁知道解决这个问题的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-03 14:06:20

你可能只是从错误的角度看待这个问题。Famo.us是一个客户端动画和物理引擎。它不打算在服务器上使用。Famo.us也是完全的后端不可知论者,因为它并不关心服务器端发生了什么事情。

在著名代码中看到的“require”函数与节点中的“require”函数不相同。节点使用CommonJS模块模式,而RequireJS则不同。这将在这里中得到更详细的解释。

简而言之,您的问题是,您试图让客户端代码做服务器端的事情,这是不对的。您是节点服务器,应该为所需的所有客户端文件提供服务,为了向数据库之类的东西发出请求,客户端应该发出API请求,让服务器做一些事情。理想情况下,您希望使用客户端MVC (主干、Ember、handles )来进一步防止数据污染处理演示文稿的代码。famo.us的例子现在并没有深入到这个领域。

票数 7
EN

Stack Overflow用户

发布于 2017-01-16 09:04:50

修好了。我启动了一个连接到的额外节点。

connect.js

代码语言:javascript
复制
// The actual grunt server settings
module.exports =  function (grunt) {
  'use strict';
  return {
    options: {
      port: grunt.option('port') || 1337,
      livereload: grunt.option('livereload') || 35729,
      // Change this to '0.0.0.0' to access the server from outside
      hostname: grunt.option('hostname') || '0.0.0.0'
    },
    livereload: {
      options: {
        open: true,
        base: [
          '.tmp',
          '<%= config.app %>'
        ]
      },
      middleware: function (connect) {
        return [
          require('./server.js') // your server packaged as a nodejs module
        ]
      }
    },
    dist: {
      options: {
        open: true,
        base: '<%= config.dist %>',
        livereload: false,
      }
    }
  };
};

server.js ( Socket IO和MySQL的快速实现):

代码语言:javascript
复制
var io = require('socket.io').listen(9001);

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '****',
  database : '****'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err
  console.log("Connected to Database");
  io.sockets.on('connection', function (socket) {
    socket.emit('news', { hello: '22' });
    socket.on('my other event', function (data) {
      console.log(data);
      console.log(rows);
    });
  });
});
connection.end();

index.html

代码语言:javascript
复制
<!DOCTYPE HTML>
<html>
    <head>
        <title>Narrowcasting</title>
        <meta name="viewport" content="width=device-width, maximum-scale=1, user-scalable=no" />
        <meta name="mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />

        <link rel="stylesheet" type="text/css" href="lib/famous/core/famous.css" />

        <!-- build:css(app/) css/app.css -->
        <link rel="stylesheet" type="text/css" href="styles/app.css" />
        <!-- bower:css -->
        <!-- endbower -->
        <!-- endbuild -->

        <!-- build:js(app/) src/polyfills.js -->
        <script type="text/javascript" src="lib/famous-polyfills/functionPrototypeBind.js"></script>
        <script type="text/javascript" src="lib/famous-polyfills/classList.js"></script>
        <script type="text/javascript" src="lib/famous-polyfills/requestAnimationFrame.js"></script>
        <!-- endbuild -->

        <!-- process:remove:dev -->
        <script src="http://localhost:9001/socket.io/socket.io.js"></script>
        <script type="text/javascript" src="src/main.js"></script>
        <!-- /process -->

        <!-- process:remove:dist -->
        <script type="text/javascript" src="lib/requirejs/require.js" data-main="src/requireConfig"></script>
        <!-- /process -->
    </head>
    <body></body>
</html>

main.js

代码语言:javascript
复制
define(function(require, exports, module) {
    var socket = io.connect('http://localhost:9001');
    socket.on('news', function(data) {
        console.log(data);
        socket.emit('my other event', { my: data });
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23383320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档