在查看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>
答案 0 :(得分:0)
npm install
无法启动服务器。这是一个安装包的命令。
在此特定示例中,createServer
函数将接受端口8000
上的连接。它取自node.js
个文档。
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
执行上述代码后,服务器即开启。 express
是node.js
的框架。 express
在node.js
的顶部创建服务器,因此express
配置(以及端口号)将由node.js
执行。 port
服务器的指定express
将运行node.js
服务器的实例,这就是故事的结尾
要连接到mysql
,您可以使用其中一个mysql
个node
个包裹,例如:
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访问服务器端,因此将它们作为单独的模块/项目进行开发。不要开发为单个模块/项目。