按照Demo: GraphQL with Oracle Database and node-oracledb中提供的解決方案,我使用 Apollo GraphQL 創建了一個簡單的 Node JS 應用程式。但是,我堅持將從 Oracle DB 獲得的結果集轉換為 GraphQL 模式所期望的所需形式。如果我在結果集上使用 JSON.Parse,如上面提到的鏈接所示,則會引發錯誤 -
SyntaxError:JSON 中的意外令牌 O 位于 Object.getAssets 的 JSON.parse () 的位置 0 ..executeQuery.js:39:19
這是我在 Node.js 中的第一個代碼,我仍在學習。因此,有人可以幫我理解為什么它對我不起作用。我正在記錄從 DB 獲得的結果,它按預期回傳 10 條記錄。
這是我的代碼:
GraphQL 架構定義:schema.js
const { gql } = require("apollo-server");
const typeDefs = gql`
type Asset {
id: ID!
account_id: String
group_id: String
}
type Query {
assets: [Asset]
}
`;
module.exports = typeDefs;
決議器:resolvers.js
const queryrunner = require("./executeQuery.js")
const resolvers = {
Query: {
assets: async() => queryrunner.getAssets(),
},
};
module.exports = resolvers;
從檔案 oracledatasource.js 獲取連接
let connection;
var oracledb = require('oracledb');
module.exports = {
getConnection : function () {
connection = oracledb.getConnection({
user : "username",
password : "password",
connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = servicename)))"
});
console.log("Successfully connected to Oracle!")
return connection;
}
}
并在 executeQuery.js 中執行查詢:
const conn = require('./oracledatasource')
module.exports = {
getAssets : async() => {
let connection = await conn.getConnection();
let query = "SELECT\r\n"
" CA.ASSET_ID as id,\r\n"
" CA.ACCNT_ID as account_id,\r\n"
" CA.GROUP_ID as group_id\r\n"
"FROM\r\n"
" SCHEMA.TABLE CA\r\n"
"WHERE\r\n"
" CA.ACTIVE_FLG = 1\r\n"
" AND ROWNUM <= 10";
console.log(query);
let result = await connection.execute(query, []);
connection.release();
console.log(result.rows);
return JSON.parse(result.rows);
}
}
index.js 是我的主檔案:
const { ApolloServer } = require("apollo-server");
const typeDefs = require('./schema');
const resolvers = require('./resolvers');
const server = new ApolloServer({
typeDefs,
resolvers
//mocks: true
});
server.listen().then(({url}) =>
console.log(`Server running at ${url}`)
);
uj5u.com熱心網友回復:
為這個問題給出的解決方案 -問題有助于獲得所需的回應。
我按照建議遵循本手冊 - node-oracledb并將 outformat 傳遞給 execute() 函式,該函式將回應作為物件陣列回傳。這消除了使用 JSON.parse 的需要。
const conn = require('./oracledatasource')
var oracledb = require('oracledb');
module.exports = {
getAssets : async() => {
let connection = await conn.getConnection();
let query = "SELECT\r\n"
" CA.ASSET_ID \"id\",\r\n"
" CA.ACCNT_ID \"account_id\",\r\n"
" CA.GROUP_ID \"group_id\"\r\n"
"FROM\r\n"
" SCHEMA.TABLE CA\r\n"
"WHERE\r\n"
" CA.ACTIVE_FLG = 1\r\n"
" AND ROWNUM <= 10";
console.log(query);
let result = await connection.execute(query, [], { outFormat: oracledb.OUT_FORMAT_OBJECT });
connection.release();
console.log(result.rows);
return Object.values(result.rows);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467502.html
上一篇:PL/SQL表變異和觸發格式
