文档章节

node+express+mysql

scofy
 scofy
发布于 2017/07/02 10:05
字数 688
阅读 117
收藏 1

使用node.js + express.js + mysql实现后端路由与数据库对接,并与前端由create react app创建的项目对接。补了点node的知识,主要也是JavaScript语言,学习成本不是很大,还能巩固一下JavaScript,一举两得。

Express

全局安装 Express

npm install -g express

创建一个名为 server.js 的文件,然后将下列代码复制进去:

const express = require('express');
const app = express();

// test
app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

上面的代码启动一个服务并监听从 3000 端口进入的所有连接请求。他将对所有 (/) URL 或 路由 返回 “Hello World!” 字符串。对于其他所有路径全部返回 404 Not Found。
后端路由接口根据自己的业务需求扩展

mysql模块

npm install mysql
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'hostname',
  user     : 'username',
  password : 'passward'
});

connection.connect();

connection.query('SELECT * FROM test', function(err, rows, fields) {
  if (err) throw err;
  console.log('The solution is: ', rows[0].testname);
});

connection.end();

这里只记录express与mysql之间的联系,mysql数据库的安装与使用在这里不做记录。
如运行顺利,这里便能从接口拿到数据,输出结果。

存在问题

node server.js后当连接超过一定时间没有活动后,会自动关闭与数据库的连接。

解决

使用连接池可以帮助我们更好的管理数据库连接。数据库连接池可以限制连接的最大数量,复用已有的连接等。

var mysql =  require('mysql');                  
var pool =  mysql.createPool({
    host : 'hostname',
    user : 'username',
    password: 'password'
});
pool.getConnection(function(err, connection){
  connection.query( “SELECT * FROM test”,  function(err, rows){
      if(err) {
          throw err;
      } else {
          console.log( rows );
      }
  });
});

与前端结合

详见create react app中的Proxying API Requests in Development
create react app 监听的端口为3000 ;node后端接口我监听的端口是5000,要使前端访问端口5000的接口获取数据时,这里就存在了跨域的问题,好在文档由详细说明,下面把上面的server.js修改一下:

var express = require('express');

const port = process.env.PORT || 5000;
const app = express();

//CORS on ExpressJS
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
//import routes
var router = require('./routes/router');

// your backend routes here
app.use('/', router);
// test backend
app.get('/', function (req, res) {
      res.send('Hello World!');
});
var server = app.listen(port, function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

主要添加了下面这端

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

允许其跨域请求,并在前端package.json中添加

"proxy": "http://localhost:5000"

使开发中的任何未知请求代理到您的API服务器

小结

摸爬滚打总算把React项目的整个流程都走通了,还是很有成就感的,在前端的领域,偶尔试着接触后端的东西也挺新鲜的。

© 著作权归作者所有

scofy
粉丝 0
博文 4
码字总数 3129
作品 0
杭州
程序员
私信 提问

暂无文章

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.8K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
4
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部