Press "Enter" to skip to content

Nodejs连接mssql并使用forever在Windows部署

有一个临时需求:需要在 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⃣️ 抱歉找不到您的原文,这里为您预留链接。

One Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code

提示