AdonisJS 无法 return 函数内响应 (SAP HANA)
AdonisJS unable to return response within a function (SAP HANA)
我在我的 AdonisJS 项目中使用 SAP HANA CLIENT for NodeJS。我无法从连接到数据库的函数中 return 作为 json 的响应。这是代码
首先调用控制器方法validateInvoice
async validateInvoice({request, response}) {
const req = request.all()
const inv_num = req.invoice_num;
const data = await this.fetchInvStatus(inv_num);
return response.json({success: true, data: data});
}
这又会调用 fetchInvStatus
实际连接到 HANA DB 的方法
var conn = hana.createConnection();
var conn_params = {
serverNode: '127.0.0.1:30015',
uid: 'CUST_USER_ROLE_ADMIN',
pwd: 'Welcome@1234',
database: 'DED'
};
conn.connect(conn_params, (err) => {
if(err) {
return err;
}
conn.exec("Select * FROM SAPDED.YACSF_RRHD where INVOICE_NUMBER = ?", ['BOMT000005'], (err, result) => {
if (err) {
return err;
}
console.log(result);
return result;
})
});
在控制台中我可以看到结果,但是这个结果没有传递给 validateInvoice
方法,因此 API 可以 return 响应。
第一个方法 response.json()
中的行甚至在来自 DB 的数据被 returned 之前执行。我怎样才能克服这个问题?我尝试将 return
语句添加到 conn.connect
和 conn.exec
但没有任何帮助!
您必须return在 fetchInvStatus 方法中承诺。
function fetchInvStatus() {
return new Promise(resolve, reject) {
var conn = hana.createConnection();
var conn_params = {
serverNode: '127.0.0.1:30015',
uid: 'CUST_USER_ROLE_ADMIN',
pwd: 'Welcome@1234',
database: 'DED'
};
conn.connect(conn_params, (err) => {
if(err) {
reject(err);
}
conn.exec("Select * FROM SAPDED.YACSF_RRHD where INVOICE_NUMBER = ?", ['BOMT000005'], (err, result) => {
if (err) {
reject(err);
}
console.log(result);
resolve(result);
})
});
}
}
我在我的 AdonisJS 项目中使用 SAP HANA CLIENT for NodeJS。我无法从连接到数据库的函数中 return 作为 json 的响应。这是代码
首先调用控制器方法validateInvoice
async validateInvoice({request, response}) {
const req = request.all()
const inv_num = req.invoice_num;
const data = await this.fetchInvStatus(inv_num);
return response.json({success: true, data: data});
}
这又会调用 fetchInvStatus
实际连接到 HANA DB 的方法
var conn = hana.createConnection();
var conn_params = {
serverNode: '127.0.0.1:30015',
uid: 'CUST_USER_ROLE_ADMIN',
pwd: 'Welcome@1234',
database: 'DED'
};
conn.connect(conn_params, (err) => {
if(err) {
return err;
}
conn.exec("Select * FROM SAPDED.YACSF_RRHD where INVOICE_NUMBER = ?", ['BOMT000005'], (err, result) => {
if (err) {
return err;
}
console.log(result);
return result;
})
});
在控制台中我可以看到结果,但是这个结果没有传递给 validateInvoice
方法,因此 API 可以 return 响应。
第一个方法 response.json()
中的行甚至在来自 DB 的数据被 returned 之前执行。我怎样才能克服这个问题?我尝试将 return
语句添加到 conn.connect
和 conn.exec
但没有任何帮助!
您必须return在 fetchInvStatus 方法中承诺。
function fetchInvStatus() {
return new Promise(resolve, reject) {
var conn = hana.createConnection();
var conn_params = {
serverNode: '127.0.0.1:30015',
uid: 'CUST_USER_ROLE_ADMIN',
pwd: 'Welcome@1234',
database: 'DED'
};
conn.connect(conn_params, (err) => {
if(err) {
reject(err);
}
conn.exec("Select * FROM SAPDED.YACSF_RRHD where INVOICE_NUMBER = ?", ['BOMT000005'], (err, result) => {
if (err) {
reject(err);
}
console.log(result);
resolve(result);
})
});
}
}