js声明数组 js数组如何获取真实对象 js数组处理null值情况 js数组通过下标赋值和push赋值的区别 loopback4的基础使用

问题来源

今天在开发过程中,遇到一个很奇怪的问题,由于公司微服务的部分网关使用loopback4

LoopBack4是IBM主导的一个高度可扩展的开源的Node.js框架,基于流行的Express框架和TypeScript语言编写。

因而这里涉及到JavaScript的代码。

现在有一个特殊的场景,需要封装设备信息和放置点信息。

现有设备数组和放置点数组,外循环是设备数组,内循环是设备放置点数组,如果设备放置点Id等于放置点的Id,就向新数组Array中添加包含设备信息和放置点信息的json对象,但无论如何新数组的长度始终小于设备数组的长度,按道理说如果设备的放置点Id不等于放置点的Id,那么就将该位置存储为null,长度始终是相等的。

于是,使用下标添加值和push添加值的两种方式,去探讨这个问题:

js数组

使用如下几种方式声明js数组:

 //第一种
 var array=new Array();

 //第二种:规定了数组的长度为2  
 var arr2 = new Array(2);

 //第三种  
 var arr3 = new Array(true,123,false);

 //第四种
 var arr4 = [false,"aaa",123]; 

数组通过下标赋值

@get('/v1/test')
  async test(
  ): Promise<any> {
    var array=new Array(0);
    let arrayLength = 5;
    for (var i =0 ;i<arrayLength;i++){
      for (var j =3;j<8;j++){
        if (i == j){
          array[i] ={"index":i}
        }
      }
    }
    return {
      "arrayLength":array.length,
      "array":array
    };
  }

返回结果为

{
    "arrayLength": 5,
    "array": [
      null,
      null,
      null,
      {"index": 3},
      {"index": 4}
    ]
}

从返回结果可以看出,如果外循环的值不等于内循环的值,外循环对应的下标指向null,数组长度为外循环数组的长度,由于array的下标不是从0开始,而是从相等处开始,即i=3,因而,下标为0,1,2的值为null

数组通过push赋值

@get('/v1/test')
  async test(
  ): Promise<any> {
    var array=new Array(0);
    let arrayLength = 5;
    for (var i =0 ;i<arrayLength;i++){
      for (var j =3;j<8;j++){
        if (i == j){
          array.push({"index":i})
        }
      }
    }
    return {
      "arrayLength":array.length,
      "array":array
    };
  }

返回结果

{
    "arrayLength": 2,
    "array": [
    	{"index": 3},
        {"index": 4}
    ]
}

push的返回数组的长度为,其真实存储的对象只有两个,因为外循环和内循环只有3和4相等。

总结

因而,如是外循环和内循环同时存在,只有相等时才填充新数组时,下标形式的数组长度要大于等于push形式的数组,因为下标形式的数组可能存储null值。

loopback4

安装

运行命令,全局安装:

npm i -g @loopback/cli

创建项目

运行如下指令创建项目

lb4 app

输入项目相关的信息,等待安装完成:

Project name: loopback_demo
Project description: Demo
Project root directory: loopback-demo
Application class name: LoopbackDemoApplication
Select features to enable in the project Enable tslint, Enable prettier, Enable mocha, Enable loopbackBuild, Enable vs
code, Enable repositories, Enable services

项目启动

安装完成后,进入程序路径,运行如下指令:

npm start

等待程序启动成功。

访问项目

程序启动成功后,打开浏览器输入http://127.0.0.1:3000/ping,可以看到以下信息:

{
	"greeting": "Hello from LoopBack",
	"date": "2019-01-23T05:48:58.850Z",
	"url": "/ping",
	"headers": {
		"host": "127.0.0.1:3000",
		"connection": "keep-alive",
		"upgrade-insecure-requests": "1",
		"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
		"dnt": "1",
		"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
		"accept-encoding": "gzip, deflate, br",
		"accept-language": "zh-CN,zh;q=0.9,en;q=0.8"
	}
}

创建HelloController

运行命令,输入controller名称,回车会自动执行,等执行完毕。

lb4 controller

执行完毕后进入创建的controller文件,粘贴以下内容:

import {get} from '@loopback/rest';

export class HelloController {
  @get('/hello')
  hello(): string {
    return 'Hello world!';
  }
}

运行访问HelloController

运行npm start,等待程序启动成功。

程序启动成功后,打开浏览器输入http://127.0.0.1:3000/hello,可以看到信息Hello world!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要从FTP获取文件流,可以使用Node.js的`ftp`包。以下是使用该包从FTP获取文件流的示例代码: 首先,安装`ftp`包: ``` npm install ftp ``` 然后,在LoopBack 4应用程序中,创建一个服务类来处理FTP操作: ```typescript import {injectable} from '@loopback/core'; import * as ftp from 'ftp'; import {PassThrough} from 'stream'; @injectable() export class FtpService { private client: ftp; constructor() { this.client = new ftp(); // connect to FTP server this.client.connect({ host: 'ftp.example.com', user: 'username', password: 'password' }); } async getFileStream(path: string): Promise<PassThrough> { return new Promise<PassThrough>((resolve, reject) => { // create a readable stream const stream = new PassThrough(); // get the file from FTP server this.client.get(path, (err, ftpStream) => { if (err) { reject(err); } else { ftpStream.pipe(stream); ftpStream.on('end', () => { resolve(stream); }); } }); }); } async close() { // close FTP connection this.client.end(); } } ``` 在上面的代码中,我们创建了一个`FtpService`类,它有一个`getFileStream`方法,该方法接受一个FTP文件路径,并返回一个可读流(`PassThrough`)。 在`getFileStream`方法中,我们首先创建一个`PassThrough`流。然后,使用`ftp`包的`get`方法从FTP服务器获取文件流,并将其管道到`PassThrough`流中。最后,我们在FTP流的`end`事件上解析`PassThrough`流并将其返回。 请注意,在`FtpService`类的构造函数中,我们建立了与FTP服务器的连接。还提供了一个`close`方法,该方法可以关闭FTP连接。 现在,我们可以在LoopBack 4控制器中使用`FtpService`服务来获取FTP文件的流: ```typescript import {inject} from '@loopback/context'; import {get, param} from '@loopback/rest'; import {FtpService} from '../services'; export class MyController { constructor( @inject('services.FtpService') private ftpService: FtpService, ) {} @get('/files/{path}') async getFileStream( @param.path.string('path') path: string, ): Promise<any> { const stream = await this.ftpService.getFileStream(path); // return the stream return stream; } } ``` 在上面的代码中,我们使用`@inject`装饰器将`FtpService`服务注入到控制器中。然后,我们使用`@get`装饰器定义了一个接口,该接口接受一个FTP文件路径,并返回一个流。在接口实现中,我们调用`FtpService`服务的`getFileStream`方法来获取FTP文件的流,并将其返回给调用者。 这就是如何在LoopBack 4应用程序中从FTP获取文件流的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网全栈开发实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值