Linux安装Nodejs并访问数据库+部署到web

下载Nodejs

Nodejs官网

wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz

解压

tar -xvf node-v12.16.3-linux-x64.tar.xz
#移动
mv node-v12.16.3-linux-x64 /usr/local/node

建立软链接

ln -s /usr/local/node/bin/node /usr/sbin/node
node -v

在这里插入图片描述
安装成功!

参考自https://www.cnblogs.com/sirdong/p/11447739.html

nodejs访问数据库

新建工作目录

mkdir $HOME/node
cd $HOME/node

安装驱动

/usr/local/node/bin/npm install mysql

新建all.js

vim $HOME/node/all.js

内容如下

var mysql  = require('mysql');  
//创建连接
var connection = mysql.createConnection({    
  host     : 'localhost',
  user     : 'root',    
  password : 'root',
  port     : '3306',    
  database : 'database'
});
//连接
connection.connect();

var sql = 'select * from table';

//开始查询
connection.query(sql,function(err,result){
        if(err){
                console.log('[select error] -',err.message);
                return;
        }   
        console.log(result);
});
connection.end();

效果如下
在这里插入图片描述

nodejs部署到Web

对上面的代码稍作修改

var http=require('http');
var url = require('url');
var mysql  = require('mysql');
//创建连接
var connection = mysql.createConnection({    
  host     : 'localhost',
  user     : 'root',    
  password : 'miao',
  port     : '3306',    
  database : 'book_library'
});
//准备sql
var sql = 'select * from book';

//创建服务器
server = http.createServer(function(request,response) {
        //解析请求,包括文件名
        var pathname= url.parse(request.url).pathname;
        //console.log(pathname);
        if(pathname !="/all.js"){
                //HTTP 状态码 404 : NOT FOUND
                //Content Type:text/plain
                response.writeHead(404,{'Content-Type': 'text/html'});
                response.end("<p1>error</p1>");
                return;
        }   
        //HTTP 状态码 200 : OK
        //Content Type:text/plain
        response.writeHead(200,{'Content-Type': 'text/html'});
        //向客户端输出
	    //开始查询
        connection.query(sql,function(err,result){
        if(err){
                console.log('[select error] -',err.message);
                return;
        }
        //console.log(result);
        response.write(
        '<!DOCTYPE html>'+
        '<html lang="en">'+
        '<head>'+
        '<meta charset="utf-8"/>'+
        '</head>');
        response.write("这个是Nodejs实现的页面");
        //打印表头
        response.write("<table border='1'><tr>");
        response.write("<th>书号</th>");
        response.write("<th>书名</th>");
        response.write("<th>作者</th>");
        response.write("<th>出版社</th>");
        response.write("<th>价格</th></tr>");
        //遍历结果集输出
        result.forEach(r =>{
                response.write("<tr>");
                response.write("<td>"+r.book_id+"</td>");
                response.write("<td>"+r.title+"</td>");
                response.write("<td>"+r.author+"</td>");
                response.write("<td>"+r.publisher+"</td>");
                response.write("<td>"+r.price+"</td>");
                response.write("</tr>");
		})
        //发送响应数据
        response.end();
        });
});
server.listen(9003);

结果如下
在这里插入图片描述

注意的几点:

  1. connection.query是一个回调函数。在nodejs中,回调函数都是异步执行的。所以response.end()需要放在回调函数里面,不然就会出现write
    after end
    的错误。
  2. 不用自己手动建立数据库连接。由query隐式的连接数据库,它可以创建或者复用空闲的数据库连接。
  3. response.write输出到客户端的时候需要加载html头部,声明其字符集,不然会出现乱码。

Nodejs定时器Promise

promise中有一个then方法能确保在回调函数结束后执行

Error: Cannot enqueue Handshake after invoking quit.

https://www.cnblogs.com/zaifeng0108/p/7224991.html

Error: Cannot enqueue Query after invoking quit.

https://blog.csdn.net/qq_39045645/article/details/95726315

部署到nginx

利用nginx的反向代理

后台执行all.js
node $HOME/node/all.js&

修改nginx配置文件,添加如下片段,即可通过nginx的端口访问到

location ~/all.js$ {
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_set_header Host            $http_host;
	proxy_pass   http://127.0.0.1:9003;
}

猜你喜欢

转载自blog.csdn.net/LittleSeedling/article/details/105907364
今日推荐