有一个临时需求:需要在 Windows 上的 mssql 数据库里面查一些输入供外网访问。
一开始同事使用go语言写的,结果 mssql 的第三方库总是报错,编译不通过。简单搜索了一下,发现PHP 的 mssql 函数簇只能在 PHP5.2 左右使用,所以我决定用 Nodejs 来搞一下。
难点分析:Windows环境、mssql 连接、监听主机端口号
一、官网安装 Node v12
Windows 下安装 Node 的 .msi 格式,真实一把梭~
二、初始化项目
打开 PowerShell
d:
mkdir api
cd api
npm init
三、安装 mssql 依赖包
npm install mssql --save
四、使用原生 http 和 url 模块编写代码
使用原生仅仅是为了简单减少依赖,代码并没有拆分成更细的模块文件。如果你有更多或复杂的 sql 查询,建议把 sql 部分重新封装来使用,如 mssql.query()、mssql.exec()。
// path d:\api\index.js
const mssql = require('mssql');
const config = {
user: 'sa',
password: 'your_password',
server: 'localhost', // You can use 'localhost\instance' to connect to named instance
database: 'your_db',
options: {
enableArithAbort: false,
// encrypt: true, // Use this if you're on Windows Azure
}
}
var http = require('http'), url = require('url'), port = 3000;
// 创建监听服务
http.createServer(function(req, res){
var parsed_url = url.parse(req.url, true);
var pathname = parsed_url.pathname;
if(pathname == '/get_something'){
res.writeHead(200, {
'Content-Type': 'application/json'
});
// 检查变量
if (!Object.prototype.hasOwnProperty.call(parsed_url, 'query')) res.end('Err: query');
if (Object.getOwnPropertyNames(parsed_url.query).length<1) res.end('Err: query empty');
if (!Object.prototype.hasOwnProperty.call(parsed_url.query, 'params')) res.end('Err: params');
var params = parsed_url.query.params;
// console.log(typeof params)
// console.log(params)
// 组装sql
var sql = "SELECT * FROM SomeTable WHERE SomeField = '" + params + "';";
// 查询数据库
mssql.on('error', err => {
if(err){
console.log(err);
res.end('Mmsql err:' + JSON.stringify(err));
}
})
mssql.connect(config, err => {
if(err){
console.log('Connect fail');
res.end('Connect fail:' + JSON.stringify(err));
}
new mssql.Request().query(sql, (err, result) => {
if(err){
console.log(err)
}
console.log(result)
result = JSON.stringify(result);
res.end(result);
})
})
}
else {
res.writeHead(404, {
'Content-Type': 'text/plain'
});
res.end('Page not found\n');
}
}).listen(port);
console.log('Node service listen: '+ port +' & Starting...');
五、测试、服务器放行 3000 端口
略过
六、使用 forever 部署
全局安装
npm install forever -g
测试
d:
cd /api
forever start index.js
使用 forever list
命令查看是否成功启动,并外网访问服务是否正常。
七、使用任务计划部署开机启动
直接使用任务计划部署总提示找不到文件错误,可能是有跨盘操作,Node 的环境是装在了 C 盘,这里参考了 网友1⃣️ 的办法,先写一个 bat 脚本,然后任务计划调用这个脚本,bat 脚本如下:
@echo off
d:
forever start -o /api/logs_out.log -e /api/logs_err.log /api/index.js
这样就部署完成了,整个项目从提出想法到确定可行性、测试、部署一共花费不到3个小时,代码也没超过 100 行,效率还算是挺高的了。
注:1⃣️ 抱歉找不到您的原文,这里为您预留链接。
1 thought on “Nodejs连接mssql并使用forever在Windows部署”