我知道这个问题有很多重复之处,但是我已经浪费了太多时间寻找正确的解决方案。
首先看一下我的Node.JS:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
var sql = require("mssql");
// config for your database
var config = {
user: 'myuser',
password: 'mypass',
server: 'myip',
database: 'mydatabase'
};
sql.close();
// connect to your database
sql.connect(config, function (err) {
if (err) console.log(err);
var dataqu = '';
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.query("select * from AR_Invoices", function (err, recordset) {
if (err) console.log(err)
res.json(recordset);
sql.close();
});
});
});
var server = app.listen(5000,'0.0.0.0', function () {
console.log('Server is running..');
});
此代码运行良好,但json结果结构如下:
{"recordsets":[[{"Tipe":"Invoices","InvoiceID":411891,"InvoiceNumber":"SR.1701.0001"}]],"recordset":[{"Tipe":"Invoices","InvoiceID":411891,"InvoiceNumber":"SR.1701.0001"}],"output":{},"rowsAffected":[1]}
我不知道为什么,但是由于某种原因,结果总是重复。
以及如何仅选择InvoiceID
和InvoiceNumber
?
我已经使用recordset.InvoiceID
或recordset[0].InvoiceID
进行了测试,但所有结果都是徒劳的,结果始终是重复的。
任何人都可以解释如何正确执行此操作吗?
我希望最终结果变成这样:
[
{ "InvoiceID":"1", "InvoiceNumber":"mynumber" }
]
答案 0 :(得分:0)
为了以后的参考,我终于知道了如何做,这是我的完整代码
var express = require('express');
var app = express();
var dateFormat = require('dateformat');
app.get('/', function (req, res) {
var sql = require("mssql");
// config for your database
var config = {
user: 'myuser',
password: 'mypassword',
server: 'myip',
database: 'mydb'
};
sql.close();
// connect to your database
sql.connect(config, function (err) {
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.query("select top 2 'Invoices' as Tipe,InvoiceID,InvoiceNumber,InvoiceDate,(select top 1DriverPicture from dbDigitalApp.dbo.tbdriver) as Blob from AR_Invoices", function (err, result) {
if (err) console.log(err)
var myarr = new Array();
for (var i = 0; i < result.recordset.length; ++i) {
var InvoiceNumber = result.recordset[i].InvoiceNumber;
var InvoiceDate = dateFormat(result.recordset[i].InvoiceDate, "dd mmmm yyyy");
var Blob = result.recordset[i].Blob;
myarr.push({'InvoiceNumber':InvoiceNumber,'InvoiceDate':InvoiceDate,'Blob':Buffer.from(Blob).toString('base64')});
}
res.json(myarr);
sql.close();
});
});
});
var server = app.listen(5000,'0.0.0.0', function () {
console.log('Server is running..');
});
上面的代码结果如下:
使用上述代码,您只能获得特定字段,并且可以对这些特定数据执行任何所需的操作,例如更改日期格式或对base64进行编码。 我不知道这是否是最干净的方法,因为node.js具有使用res.json的自己的功能,该功能可以设置检索数据的所有字段,而无需遍历它。
但是至少这是我的一种解决方案,希望它对将来想知道与我一样的事情的人们有帮助。