使用MySql,express,angular,nodejs时,express和node的端口会不同

时间:2015-03-22 17:27:28

标签: mysql angularjs node.js express

在查看express + node + mysql时,教程建议使用node server.js启动快速服务器(此处server.js包含连接到mysql db的逻辑),调用app.listen()和angular +节点教程使用npm start启动节点服务器。

它们是不同的,我必须同时开始吗? 如果是的话,我需要使用差异端口吗? 万一,没有,如何调用mysql db?请提供一些参考或详细说明。

server.js如下:

var express         =         require("express");
var mysql           =         require("mysql");
var app             =         express();
var connection      =         mysql.createConnection({
        host        :         "localhost",
        user        :         "userid",
        password    :         "password",
        database     :         "sakila"
});
connection.connect(function(error){
  if(error)    {
      console.log("Problem with MySQL"+error);
  } else {
      console.log("Connected with Database");
   }
});
app.use(express.static(__dirname + '/bower_components/angular'));
app.get('/app/#/actors_load',function(req,res){
  connection.query("SELECT * from actor",function(err,rows){
    if(err) {
        console.log("Problem with MySQL"+err);
      } else {
          res.end(JSON.stringify(rows));
      }
  });
});
app.listen(8000,function(){
  console.log("It's Started on PORT 8000");
});

我的phonecatapp有以下路由器:

phonecatApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/phones', {
        templateUrl: 'partials/phone-list.html',
        controller: 'PhoneListCtrl'
      }).
      when('/phones/:phoneId', {
        templateUrl: 'partials/phone-detail.html',
        controller: 'PhoneDetailCtrl'
      }).
      when('/actors_load', {
        templateUrl: 'partials/actors.html',
        controller: 'ActorsCtrl'
      }).
      otherwise({
        redirectTo: '/phones'
      });
  }]);

和控制器看起来像这样:

phonecatControllers.controller('ActorsCtrl',function($scope, $http, $interval){
    load_names();
    console.log("ActorsCtrl");
    /*
    $interval(function(){
      load_names();
    },300);
    */
    function load_names(){
        $http.get('http://localhost:8000/actors_load').success(function(data){
            console.log("kdfhg"+data);
          $scope.actors=data;
        });
    };
});

html的部分有一个链接来填充数据库数据: <div><a href="#/actors_load">actors</a></div>

2 个答案:

答案 0 :(得分:0)

  

npm install无法启动服务器。这是一个安装包的命令。

在此特定示例中,createServer函数将接受端口8000上的连接。它取自node.js个文档。

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

执行上述代码后,服务器即开启。 expressnode.js的框架。 expressnode.js的顶部创建服务器,因此express配置(以及端口号)将由node.js执行。 port服务器的指定express将运行node.js服务器的实例,这就是故事的结尾


要连接到mysql,您可以使用其中一个mysqlnode个包裹,例如:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : '< MySQL username >',
  password : '< MySQL password >',
  database : '<your database name>'
});

connection.connect();

在上述情况下,您使用localhost作为数据库的地址。

  

您可以在mysql网站上找到大量npm个软件包:https://www.npmjs.com/search?q=mysql

您也可以使用mysql.createClient进行成本化连接:

var client = mysql.createClient({
  user: '??',
  password: '??',
  port: 8889
});
  

注意:请记住require您的包裹,否则它们根本无法使用。

答案 1 :(得分:0)

经过反复试验,我发现srever.js在服务器端,项目的角度部分在客户端。从角度部分,只有接收数据的方式是使用REST API。 server.js将促进提供REST API的这一角色,因此应在diff端口上运行。这意味着我必须致电npm start以及node server.js。然后我面临CORS问题,我通过提供

解决了这个问题
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header ("Access-Control-Allow-Credentials", true);
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
  next();
});
server.js中的

。没有看到这段代码的效果,你需要启动两台服务器。这对我来说真是一个痛点。我花了一整天时间在各个地方尝试各种组合来解决CORS问题。它似乎不起作用。由于某些原因,我停止了服务器并重新启动,它正在工作。经过几次试验,我意识到即使删除了上面的代码,它仍然有效。所以,我再次停止服务器,这次它没有工作,这就是我意识到的。

我正在混淆两个人,认为他们是一个有客户端和服务器端的项目。任何新手,请理解客户端作为REST API访问服务器端,因此将它们作为单独的模块/项目进行开发。不要开发为单个模块/项目。