asp页面从数据库查询结果后 怎么返回为json格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp页面从数据库查询结果后 怎么返回为json格式相关的知识,希望对你有一定的参考价值。

为了使用jquery的ajax,要用json格式传递数据,asp页面有json类可以封装好返回吗

asp在服务器端不支持json格式,可以使用dll在服务器端,或在服务器端向<script javascript>标签里面读取数据 参考技术A http://wenku.baidu.com/view/b850e44733687e21af45a91a.html
可将查询结果转为JSON

如何从 MySQL 查询中将 json 返回到 GraphQL?

【中文标题】如何从 MySQL 查询中将 json 返回到 GraphQL?【英文标题】:How to return a json to GraphQL from a MySQL query? 【发布时间】:2018-11-03 00:52:04 【问题描述】:

我是 nodejs 和 qraphql 的新手,我正在尝试对 graphql 进行简单的查询。对 MySQL 数据库进行查询后,我的问题是我不知道如何将数据正确发送到 graphql 以查看结果。

我必须尝试对解析进行字符串化,但它不起作用。我用 json 从 mySQL 返回结果,但它不起作用。为什么我在 Graphiql 中看不到结果?我必须如何返回解决方案?

这是我进行查询并返回结果的函数:

let getPlayer = (args) => 
    let id = args.id;
    console.log("id: " + id);
    let myPromise = new Promise((resolve, reject) => 
        const connection = mysql.createConnection(config.ddbb_connection);
        connection.connect();
        connection.query("select json_object('id', id) as player from tbl003_player where id = " + id, 
                        function (error, results, fields) 
            if (!error)
                if (results.length > 0)
                    resolve(results[0]);
                    console.log("resultado: " + results[0]);
                else
                    reject(new Error("No se ha encontrado ninguna jugadora con el ID: " + id));
                
            else
                reject(new Error("Se ha producido un error de acceso a BBDD"));
                         
          );
        connection.end();        
    );
    console.log("Salgo de la consulta");
    myPromise.then((resolve) => 
        console.log("resolve: " + JSON.stringify(resolve));
        return resolve;
    ,(error) => 
        console.log(error);
        return error;
    );
;

编辑我:

如果我将 JSON.stringify 更改为 JSON.parse,我会在控制台中收到此错误:

(node:31898) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at myPromise.then (/home/josecarlos/Workspace/graph-ql/primer-server-express/routes-api.js:68:21)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
(node:31898) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing insideof an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:31898) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

编辑二:

我已经修复了返回 JSON.parse(resolve) 时的错误,但它不起作用:( 我在 GraphiQL 中仍然遇到此错误:


  "data": 
    "player": null
  

我管理 myPromise 的代码现在是这个 ...

myPromise.then((resolve) => 
    console.log("resolve: " + JSON.stringify(resolve));
    data = JSON.parse(resolve);
    return data;
,(error) => 
    console.log(error);
    return error;
).catch(() => 
    console.log("Entro dentro del catch");
);

编辑 III:

我们有这个字符串 "player":"\"id\": 11" 和 JSON.stringify(resolve)。我认为我只需要返回 \"id\":11。我怎样才能做到这一点?知道如何将 json 返回到 GraphiQL 吗?

编辑 IV:

我已经修改了我的代码,只返回带有 return resolve(results[0].player) 的 json,但它不起作用!!!

这是我的实际代码:

let getPlayer = (args) => 
    let id = args.id;
    console.log("id: " + id);
    let myPromise = new Promise((resolve, reject) => 
        const connection = mysql.createConnection(config.ddbb_connection);
        connection.connect();
        connection.query("select json_object('id', id) as player from tbl003_player where id = " + id, 
                        function (error, results, fields) 
            if (!error)
                if (results.length > 0)
                    resolve(results[0].player);
                    console.log("resultado: " + results[0].player);
                else
                    reject(new Error("No se ha encontrado ninguna jugadora con el ID: " + id));
                
            else
                reject(new Error("Se ha producido un error de acceso a BBDD"));
                         
          );
        connection.end();        
    );
    console.log("Salgo de la consulta");
    myPromise.then((resolve) => 
        console.log("resolve: " + JSON.stringify(resolve));
        return JSON.parse(resolve);
    ,(error) => 
        console.log(error);
        return error;
    ).catch(() => 
        console.log("Entro dentro del catch");
    );
;

【问题讨论】:

【参考方案1】:

问题应该是在你的承诺得到解决之前你已经从你的解析器返回,因此你总是得到 null:


  "data": 
    "player": null
  

您可以做的是,在您的解析器中等待 return util 您的承诺已经解决,如下所示:

async getPlayer(obj, args, context) => 
    ...
    let myPromise = new Promise((resolve, reject) => 
        ...
    );
    console.log("Salgo de la consulta");
    let result;
    try 
      result = await myPromise;
     catch(error) 
      return error;
    
    return JSON.stringify(result);
;

【讨论】:

【参考方案2】:

您是否尝试过使用 JSON.parse() 而不是 JSON.stringify?

您可能会在此处获得有关差异的更多信息: Difference between JSON.stringify and JSON.parse

【讨论】:

是的,使用 JSON.parse 我在服务器中有一个错误:( 感谢@Denis Kovzelyuk,但如果我尝试返回 JSON.parse(resolve) 就会出错。我已经用错误编辑了我的原始帖子。发生了什么?

以上是关于asp页面从数据库查询结果后 怎么返回为json格式的主要内容,如果未能解决你的问题,请参考以下文章

用asp怎么将查询结果转化为json

ASP.NET SQL 查询未返回预期结果

asp页面如何分页显示动态查询的结果?

vue解析json对象取值异常处理

怎么用JAVA把数据库查询结果显示在网页上

ssm框架 怎么用ajax查询从数据库读取数据 返回json格式