以下為通過node.js連線本機mysql資料庫的方法:

var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'xxxx',//此處的xxxx替換為你的mysql登入使用者名稱
password : 'xxxx',//此處的xxxx替換為你的mysql登入密碼
database : 'xxxx',//此處的xxxx替換為你要連線database名稱
socketPath : '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
port:3306
}); connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
} console.log('connected as id ' + connection.threadId);
}); 這裡的重點是要配置socketPath,否則會報以下這個錯: error connecting: Error: connect ECONNREFUSED

不好意思  上面的是我从网上找的,照着写改来改去没起作用~~  依然连不上

最后解决办法是,

在服务器搞MYSQL服务,搭建数据库,或者是内网其他电脑起一个MYSQL服务,这边调用

MAC本地代码  不需要添加socketPath,即可完美调用本地nodejs接口

简单版代码如下

var express = require('express');
var app = express();
const routes = require('./routers'); const index=require('./routers/index');
app.get('/', (req, res) => res.send('App is working')); // app.use('/', routes);
// app.use('/api/idToken', routes); app.use('/api/index',index);
app.get('/aa', (req, res) => {
res.send('hello')
// res.sendFile(__dirname + '/dist/index.html')
})
app.listen(5000, () => {
console.log("server up");
}); module.exports = {
app
};

完整版可参考代码如下

app.js

const express=require('express');
// const bodyParser=require('body-parser');
const session = require('express-session')
var MySQLStore = require('express-mysql-session')(session); //创建web服务器
var server=express();
var options = {
host: '22.22.12.122',
port: 3306,
user: 'root',
password: 'root',
database: 'cake'
};
var sessionStore = new MySQLStore(options); //引入路由模块
const cors=require('cors');
// const index=require("./routes/index");
const userRouter=require('./routers/user.js');
const cartRouter=require('./routers/cart.js');
const details=require('./routers/detail.js');
const product=require('./routers/product');
const index=require('./routers/index');
const pics=require('./routers/pics');
const login=require('./routers/login');//本接口仅供测试使用
const find=require('./routers/find');
const kind=require('./routers/kind');
const captcha=require('./routers/captcha');
const portal=require('./routers/portal'); //托管静态资源到public下;
server.use(express.static('public'));
server.use(express.static('dist'));
//跨域请求cors
server.use(cors
(
{
origin:"*" ,
// origin:"http://localhost:8080" ,
// origin:"http://localhost:4200" ,
// origin:"http://127.0.0.1:5500" ,
credentials: true
}
)
);
// server.writeHead(200,{"Access-Control-Allow-Credentials":true});
server.use(express.json())
server.use(express.urlencoded({
extended:false
})); //session 启用会话中间件,用来保存用户登录状态以及验证码
server.use(session({
name: 'sessionId',
resave: true,
saveUninitialized: true,
secret: 'APP_SESSION_SECRET',
store: sessionStore // 将会话存到数据库
})) server.use('/api/user',userRouter);
server.use('/api/cart',cartRouter); server.use('/api/product',product);
server.use('/api/details',details);
server.use('/api/index',index);
server.use('/api/pics',pics);
// server.use('/api/login',login);本接口仅供测试使用
server.use('/api/find',find);
server.use('/api/kind',kind);
server.use('/api/captcha',captcha);
server.use('/api/portal',portal); // server.get('*', (req, res) => {
// res.sendFile(__dirname + '/dist/index.html')
// })
// server.get('/aa', (req, res) => {
// res.send('hello')
// // res.sendFile(__dirname + '/dist/index.html')
// })
// 异常处理器
server.use((req,res,next,err)=>{
console.log(err.message)
res.sendStatus(500);
}) server.listen(3006, () => {
console.log("server up");
});

pool.js

const mysql=require('mysql');
//创建连接池对象
// var pool=mysql.createPool({
// host:'localhost',
// port:'3306',
// user:'root',
// password:'',
// database:'cake',
// connectionLimit:20
// });
var pool=mysql.createPool({
host: '22.222.12.122',
port: 3306,
user: 'root',
password: 'root',
database:'cake',
connectionLimit:20
});
//到处连接池对象
module.exports=pool;

路由文件举例如下:

./routers/index
const express = require("express");
const router = express.Router();
const pool = require("../pool"); //一次查询返回4条数据
router.get("/", (req, res) => {
var status = req.query.status;
var output = {
product: {}
}
if (status !== undefined) {
var sql1 = `select * from cake_index_product where index_status=?`;
pool.query(sql1, [status], (err, result) => {
if (err) console.log(err);
output.product = result;
// console.log(output);
// console.log("haha1");
res.send(output);
}) }else{
res.send(output);
console.log(444)
}
}) //一次查询返回多条数据
router.get("/insale", (req, res) => {
var status = req.query.insale;
var output = {
product: {}
}
if (status !== undefined) {
var sql1 = `select * from cake_index_product where index_sale_new=?`;
pool.query(sql1, [status], (err, result) => {
if (err) console.log(err);
output.product = result;
res.send(output);
}) }else{
res.send(output);
// console.log(444)
}
})
//首页产品一次性展示+轮播图查询
router.get("/all", (req, res) => {
var output = {
carouselItems:{},
product: {},
pics:{},
kinds:{}
}
var sql1 = `select * from index_img `;
pool.query(sql1,(err, result) => {
if (err) console.log(err);
output.carouselItems = result;
var sql2 = `select * from cake_index_product `;
pool.query(sql2,(err, result) => {
if (err) console.log(err);
output.product = result; var sql3 = `select * from product_pic `;
pool.query(sql3,(err, result) => {
if (err) console.log(err);
output.pics = result; var sql4 = `select * from product_kinds `;
pool.query(sql4,(err, result) => {
if (err) console.log(err);
output.kinds = result;
res.send(output);
})
})})
})
})
// 測試接口aa
router.post("/scan/collect", (req, res) => {
console.log('wolaila11')
let emp_no = req.body.emp_no;
let emp_name = req.body.emp_name;
let card_time = req.body.card_time;
let qrcode = req.body.qrcode;
var output = {
error:0,
message:'success'
}
var err = {
error:1,
message:'參數有誤或者缺失參數'
} if(emp_no&&emp_name&&card_time&&qrcode){
res.send(output);
}else{
res.send(err);
} })
// 測試接口
//一次查询返回多条数据post
router.post("/postStatus", (req, res) => {
console.log('wolaila')
var status = req.body.status;
var output = {
product: {},
lalala:'woshiceshi'
}
if (status !== undefined) {
var sql1 = `select * from cake_index_product where index_sale_new=?`;
pool.query(sql1, [status], (err, result) => {
if (err) console.log(err);
output.product = result;
res.send(output);
}) }else{
res.send(output);
// console.log(444)
}
}) //首页产品轮播图查询
router.get("/img", (req, res) => {
console.log('/img')
var output = {
carouselItems:{}
}
var sql1 = `select * from index_img `;
pool.query(sql1,(err, result) => {
console.log('進入SQL')
if (err) console.log(err);
output.carouselItems = result;
res.send(output);
})
})
module.exports = router;

在Mac OS上将Node.js连接到XAMPP MySQL服务器一直报错error connecting: Error: connect ECONNREFUSED的更多相关文章

  1. mac OS 安装 Node.js

    打开Node.js官网https://nodejs.org/zh-cn/选择你需要的版本 下载安装 安装完成 输入命令 node -v 查看版本号 输入命令 npm -v 查看版本号

  2. mac OS 卸载node.js及npm

    通过homebrew安装的 输入卸载命令 brew uninstall node 通过官网下载pkg安装包的 输入卸载命令 sudo rm -rf /usr/local/{bin/{node,npm} ...

  3. 【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    问题描述 App Service使用jdbc连接MySQL服务,出现大量的  Communications link failure: com.mysql.cj.jdbc.exceptions.Com ...

  4. 1.从Node.js链接到MongoDB

    MongoDB采用了MongoDB Node.js驱动程序作为标准. 1.安装MongoDB驱动 npm install mongoDB npm install mongoose require('m ...

  5. mac下配置Node.js开发环境、express安装、创建项目

    mac下配置Node.js开发环境.express安装.创建项目 一.node.js的安装 去官网下载对应的平台版本就可以了,https://nodejs.org 二.express安装 sudo n ...

  6. paip.最好的脚本语言node js 环境搭建连接mysql

    paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world   .js 2 #---------模 ...

  7. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  8. node.js中net模块创建服务器和客户端(TCP)

    node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...

  9. 用Node.js原生代码实现静态服务器

    ---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...

  10. Mac中安装node.js和npm

    换了Mac需要安装noed.js和npm记录一下首先访问node.js官网(https://nodejs.org/en/download/) 点击下载完后,一路点安装 就安装完成了 然后打开-终端-输 ...

随机推荐

  1. MySQL 索引失效-模糊查询,最左匹配原则,OR条件等。

    索引失效 介绍 索引失效就是我们明明在查询时的条件为索引列(包括自己新建的索引),但是索引不能起效,走的是全表扫描.explain 后可查看type=ALL. 这是为什么呢? 首先介绍有以下几种情况索 ...

  2. 【原创】All in One i.MXRT1050/RT1020 SPI Flash Algorithm for J-Flash

    2020年,这个给大家一种很漫长的恍惚感的一年,终于是过去了.这一年我们很多新的人生第一次就这么被发生了,第一次居家办公这么长时间(很多人肥膘都长了不少,我却瘦了2斤,不知是工作太积极了还是被家里小怪 ...

  3. 斑马打印机二维码标签制作(.prn文件)基础简单快速上手

    在工厂生产中,经常需要一线员工在电脑上输入订单号的情况.订单号往往很长,手输容易出错,并且浪费时间,所以常常使用扫码枪扫描二维码的方式输入订单号,本篇就是记录斑马打印机.prn标签模板的制作和使用. ...

  4. 所有selenium相关的库

    通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...

  5. clip-path属性深入理解与使用

    clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域.区域内的部分显示,区域外的隐藏. clip-path的属性值可以是以下几种: 1.inset: 将元素剪裁为一个矩形, ...

  6. Docker | 常用命令——排错很有帮助

    众所周知,docker 排查问题相较而言是困难的.因此,熟知一些常用命令对我们快速的排查定位问题是非常有帮助的.下面让我们一起来学习一下吧 1.显示docker的系统信息 docker info [r ...

  7. Java8新特性—四大内置函数式接口

    Java8新特性--四大内置函数式接口 预备知识 背景 Lambda 的设计者们为了让现有的功能与 Lambda 表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念. 什么是函数式接口? 函数 ...

  8. java学习之EL和JSTL

    0x00前言 EL和JSTL都是JSP的内容的拓展,都是开发的一些东西,稍微学习记录一下,避免以后忘记 0x01EL 0x1基本用法 概念:Expression language 表达式语言 作用:替 ...

  9. 😀 Java并发 - (并发基础)

    Java并发 - (并发基础) 1.什么是共享资源 堆是被所有线程共享的一块内存区域.在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例 Java中几乎所有的对象实例都在这里分配内存.方法区与堆 ...

  10. Day18.2:对象创建的内存分析图解

    对象创建的内存分析 我们从两块最常用的内存空间对对象创建进行内存分析 堆内存:存放的是对象的具体信息:在程序之中堆内存空间的开辟是通过new完成的 栈内存:存放的是对象的地址信息,即通过地址找到堆内存 ...