我将代码部署在Azure Function App中并使用NodeJS,我试图在SQL Server数据库上执行sql脚本。为了解决这个问题,我使用了NPM软件包sqlcmd-runner。
这是我正在使用的代码:
module.exports.dumpScriptinDatabase = (dbConfig, context) => {
return new Promise((resolve, reject) => {
sqlcmd({
server: dbConfig.server,
database: dbConfig.options.database,
username: dbConfig.userName,
password: dbConfig.password,
encryptedConnection: true,
inputFiles: [`${__dirname}\\db.sql`]
})
.catch((error) => {
reject('Error dumping script!!')
})
.done(() => {
resolve('Dumping script completed.')
});
});
我正在dbConfig
变量中获取所有数据库详细信息。此外,db.sql
在模式中创建表,视图等。
我面临的问题是,该模块在发生故障的情况下永远不会向我返回错误,并且也无法成功执行。服务器在执行时返回502错误代码。
我能够调试的一件事是npm软件包代码使用sqlcmd执行脚本。
有人可以帮我吗?
答案 0 :(得分:1)
因此,我已经使用几个源文件进行了测试,可以正常运行,脚本成功运行。
index.js
const dbConfig = require('./dbconfig.json');
const dumpScript = require('./dumpScript.js');
console.log('Running script');
dumpScript.dumpScriptinDatabase(dbConfig, 'context').then(() => {
console.log('Script complete');
}).catch ( (err) => {
console.error('Script error: ', err);
});
dumpScript.js
const sqlcmd = require('sqlcmd-runner');
module.exports.dumpScriptinDatabase = (dbConfig, context) => {
return sqlcmd({
server: dbConfig.server,
database: dbConfig.options.database,
username: dbConfig.userName,
password: dbConfig.password,
encryptedConnection: true,
inputFiles: [`${__dirname}\\db.sql`]
});
}
dbConfig.json
{
"server": "sql_server",
"options": {
"database": "test_db"
},
"userName": "user",
"password": "password"
}
我已经简化了dumpScript.js文件,我们可以简单地从sqlcmd函数返回promise,而不用使用.then和.catch。
然后我们在index.js中进行处理。
我要提到的几件事,您需要在 PATH 上使用最新版本的sqlcmd实用程序才能工作。
另外,您可能需要修改index.js脚本,我正在从.json文件加载dbConfig,您可能正在做一些不同的事情。