uni-app 文档的示例代码错误

uni-app 文档的示例代码错误

开发环境 版本号 项目创建方式
Windows 10 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:10

HBuilderX类型:正式

HBuilderX版本号:3.2.7

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

页面类型:vue

打包方式:云端

预期结果:

其中末尾的

function(error, result) {    
  if (error) {    
    throw error;    
  }    
  res.json(result);    
}

error和result参数反了


bug描述:


文档地址为:https://ask.dcloud.net.cn/article/35667  
错误代码如下  

```javascript
var express = require('express');    
var router = express.Router();    
var db = require('./db');    

// TODO 查询配置文件或者数据库信息来确认是否有更新    
function checkUpdate(params, callback) {    
    db.query('一段SQL', function(error, result) {    
        // 这里简单判定下,不相等就是有更新。    
        var currentVersions = params.appVersion.split('.');    
        var resultVersions = result.appVersion.split('.');    

        if (currentVersions[0] < resultVersions[0]) {    
            // 说明有大版本更新    
            callback({    
                update: true,    
                wgtUrl: '',    
                pkgUrl: result.pkgUrl    
            })    
        } else {    
            // 其它情况均认为是小版本更新    
            callback({    
                update: true,    
                wgtUrl: result.wgtUrl,    
                pkgUrl: ''    
            })    
        }    
    });    
}    

router.get('/update/', function(req, res) {    
    var appName = req.query.name;    
    var appVersion = req.query.version;    
    checkUpdate({    
        appName: appName,    
        appVersion: appVersion    
    }, function(error, result) {    
        if (error) {    
            throw error;    
        }    
        res.json(result);    
    });    
});

更多关于uni-app 文档的示例代码错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 文档的示例代码错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html


您指出的文档示例代码确实存在参数顺序问题。在Node.js的数据库查询回调中,标准约定是function(error, result),其中error在前,result在后。示例中checkUpdate函数内部调用db.query时遵循了这一约定,但在checkUpdate自身的回调定义中却使用了function(error, result),而其内部调用callback时传递的却是一个结果对象,没有错误参数,这会导致回调执行时error参数实际接收到的是结果数据,而resultundefined

具体到checkUpdate函数,它并未处理数据库查询可能出现的错误(即db.query回调中的error未传递给checkUpdate的回调),且直接调用callback时只传递了一个结果对象。因此,其回调函数应定义为function(result),而不是function(error, result)。文档中的写法在运行时,当无错误时,error参数将接收到结果对象,resultundefined,而if (error)会误将结果对象当作错误处理,导致逻辑错误。

修正后的checkUpdate应正确处理错误传递,例如:

function checkUpdate(params, callback) {
    db.query('一段SQL', function(error, result) {
        if (error) {
            callback(error); // 传递错误
            return;
        }
        // 正常处理结果
        var currentVersions = params.appVersion.split('.');
        var resultVersions = result.appVersion.split('.');
        if (currentVersions[0] < resultVersions[0]) {
            callback(null, { // 第一个参数为null表示无错误
                update: true,
                wgtUrl: '',
                pkgUrl: result.pkgUrl
            });
        } else {
            callback(null, {
                update: true,
                wgtUrl: result.wgtUrl,
                pkgUrl: ''
            });
        }
    });
}
回到顶部