倾听用户:OSS JavaScript SDK 支持 callback 方式 改为 Nodejs:OSS JavaScript SDK 支持 callback 方式

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

倾听用户:OSS JavaScript SDK 支持 callback 方式 改为 Nodejs:OSS JavaScript SDK 支持 callback 方式

阿里云OSS SDK for JavaScript刚推出时,为了解救Callback Hell,我们积极拥抱 ES6。经过一段时间的使用,收到了很多好评(虽然大部分是给 ES 的),同时也收到了不少抱怨,coyield对于很多用户来说还是有不低的使用门槛。现在,对 callback 情有独钟的朋友们,也可以愉快地使用 OSS js sdk 了:

安装

# >= 4.3.0
npm install ali-oss

使用:

var OSS = require('ali-oss').Wrapper;

var client = new OSS({ region: ‘oss-cn-hangzhou’, accessKeyId: ‘<access-key-id>’, accessKeySecret: ‘<access-key-secret>’, bucket: ‘<bucket-name>’ });

client.list().then(function (result) { console.log(result.objects); }).catch(function (err) { console.error(err); });

使用Wrapper构造出来的OSS对象拥有原来的所有接口,只是把原来的 generator function 换成了普通的函数,并且返回一个Promise,通过.then()处理异步结果,通过.catch()处理错误。当然原来的使用方式依然支持。

Promise 的使用与 Callback 接近,但是却可以更加灵活。例如对于多层嵌套的 callback ,可以使用Promise chaining的方式让代码更直观:

// 上传一个文件,成功后下载这个文件
client.put('object', '/tmp/file').then(function (val) {
  console.log(val.res);
  return client.get('object');
}).then(function (val) {
  console.log(val.res);
  console.log(val.content.toString());
});

浏览器使用也更方便了:

<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk.min.js"></script>
<script type="text/javascript">
  var client = new OSS.Wrapper({
    region: 'oss-cn-hangzhou',
    accessKeyId: '<access-key-id>',
    accessKeySecret: '<access-key-secret>',
    bucket: '<bucket-name>'
  });

client.list().then(function (result) { console.log(result.objects); }); </script>

一个完整的例子可以参考: https://github.com/rockuw/oss-in-browser

除此之外, SDK 还有众多的优化,欢迎试用:

  • 简化浏览器版本体积,从 1.1MB 下降到 360KB 。#94
  • 支持断点续传。#80
  • 更多 bug fix 及优化见:changelog

项目地址(欢迎 fork/star/pr ): https://github.com/ali-sdk/ali-oss


5 回复



script 代码乱掉了


谢谢反馈。我们看一下这个 ```html 的问题。

已经修复。再次感谢你的反馈。

赞速度!

针对您提到的将OSS JavaScript SDK从支持callback方式迁移到Node.js环境,并继续保持对callback的支持,这里有一个基本的思路和示例代码。在Node.js中,虽然Promise和async/await是更现代和推荐的方式,但我们可以继续使用callback风格。

首先,确保您已经安装了阿里云OSS的Node.js SDK,可以通过npm安装:

npm install ali-oss

然后,您可以使用如下代码示例,展示如何在Node.js中使用callback风格:

const OSS = require('ali-oss');

const client = new OSS({
  region: '<Your Region>',
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your Bucket>'
});

// 使用callback风格上传文件
client.put('example.txt', 'Hello OSS!').then(result => {
  console.log('Upload Success:', result);
}).catch(err => {
  console.error('Upload Error:', err);
}).asCallback((err, result) => {
  if (err) {
    console.error('Callback Error:', err);
  } else {
    console.log('Callback Success:', result);
  }
});

注意,上面的代码同时展示了Promise和callback的使用。asCallback方法允许您将Promise风格的调用转换为callback风格。然而,在Node.js环境中,推荐使用Promise和async/await,因为它们提供了更清晰的错误处理和代码结构。

希望这能帮助您在Node.js环境中继续使用callback风格的OSS JavaScript SDK。

回到顶部