关于fs:使用json文件在后端存储数据

应用可读取的文件,操作须要存/取的数据; const fs = require('fs');// 获取数据const get = (key) => { // 读取文件 fs.readFile('./db.json', (err, data) => { const json = JSON.parse(data); console.log(json[key]); })}// 存入数据const set = (key, value) => { fs.readFile('./db.json', (err, data) => { const json = data ? JSON.parse(data) : {}; json[key] = value; // 写入文件 fs.writeFile('./db.json', JSON.stringify(json), err => { if (err) { console.log(err) } console.log('write Success!'); }) })}// 应用命令行接口方式,在控制台输出值来模仿接管到接口传入的值(如果有接口传入值,则以下的形式能够疏忽)const readline = require('readline');const rl = readline.createInterface({ input: process.stdin, output: process.stdout,}); // 管制输出和输入rl.on('line', (input) => { const [op, key, value] = input.split(' '); if (op === 'get') { get(key) } else if (op === 'set') { set(key, value) } else if (op === 'quit') { rl.close() } else { console.log('没有操作') }})rl.on('close', () => { console.log('close! ')})

November 20, 2020 · 1 min · jiezi

关于fs:freeswitch对接第三方asrtts

https://ptorch.com/news/207.html

October 30, 2020 · 1 min · jiezi

关于fs:freeswitch配置落地网关呼叫sipinvite协议不准确

freeswitch通过前端配置生成gw*.xml文件后依照对应呼叫策略规定,发动的sip-invite协定不正确。 问题如下: 问题排查解决从下面能够看到,咱们通过freeswitch所在本机器呼叫对应网关时候,按理对应的sip的From和To应该是:然而确变成了:From: "01118500270710" <sip:FREESWITCH@61.50.127.14> 所以咱们须要通过sofia status查看注册的内部外关的前缀. ./fs_cli -P 8031 -p testtest -x 'sofia status' 咱们须要指定对应网关的username;进入对应配置文件 针对于这种存量网关咱们应用从新加载指令是不会失效的以下指令只会针对于新生成网关无效 ./fs_cli -P 8031 -p testtest -x 'sofia profile external rescan'咱们须要应用以下加载全副网关配置指令(注:以下指令对于正在通话中的电话会主动挂断) ./fs_cli -P 8031 -p testtest -x 'reload mod_sofia'最初咱们再次查看网关状态: 再次呼叫即可失去如下后果:

October 14, 2020 · 1 min · jiezi

关于fs:freeswitch呼叫平台路由一切正常情况下呼叫异常抓不到网络包

呼叫平台失常对接freeswitch下的conf下的sip_profiles下的网关之后,依照呼叫平台事后设置好的网关路由,而后就可发动呼叫。然而在最初一步freeswitch发动呼叫的时候,网络数据包没有抓取到。问题复现如下: 1.落地网关对接1)在freeswitch下conf下sip_profiles下配置落地网关 2)刷新网关 ./fs_cli -P 8031 -p testtest -x 'sofia profile external rescan'3)查看网关加载状态 ./fs_cli -P 8031 -p testtest -x 'sofia status'2.配置路由网关在对应的cti_route外面配置残缺网关 3.发动呼叫通过号码是否可用发动呼叫 4.后果剖析排查1)查看路由轨迹:/cc/bin/log下日志 2)查看fsg交互日志: 3)查看freeswitch的电话呼叫日志: 发现查找不到呼叫记录,并且通过sngrep抓取不到记录日志 因为走得是网关gw129,所以咱们查看下gw129的状况 总结:因为网关开启了ping操作导致,ping失败后,freeswitch会主动敞开发动呼叫。所以不会发动呼叫,抓不到网络数据包。解决办法将ping去掉。

July 30, 2020 · 1 min · jiezi

关于fs:ipcc呼叫平台及其应用搭建

平台搭建个别咱们依照免装置形式,间接将一台机器上的服务包拷贝到须要装置的服务器之上即可;搭建平台分为以下步骤: 0.压缩拷贝文件咱们有时候须要搭建新的平台环境,常见的办法是从其余环境上整顿数据,而后拷贝数据到新的环境下。 1) 压缩文件: tar -zcvf cc.tar.gz /cc --exclude=/cc/log --exclude=/cc/data --exclude=/cc/freeswitch/bin/da_record --exclude=/cc/bin/log --exclude=/cc/apps --exclude=/cc/tomcat-acdgate --exclude=/cc/tomcat-loglook --exclude=/cc/tomcat-loglook --exclude=/cc/tarbak --exclude=/cc/etl_kettle 1.jdk装置下载jdk1.8包,配置jdk 1.8环境 JAVA_HOME CLASSPATH等。1) 配置环境变量:vi /etc/profile export JAVA_HOME=/cc/jdk1.8/jdk1.8.0_141     export JRE_HOME=$JAVA_HOME/jre  export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib  export PATH=$JAVA_HOME/bin:$PATH2) source(或点)命令从新执行刚批改的初始化文档 source /etc/profile3) 测验装置胜利与否 java -version2.

July 30, 2020 · 1 min · jiezi

CentOS安装Minio

二进制安装wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio ./minio server /data 注意启动显示的 appkey secretkey是默认登录账户,密码 登录浏览器浏览器输入: http://ip:9000 例如:http://10.0.102.201:9000 http://172.17.42.1:9000 http://127.0.0.1:9000 AccessKey: PQUIIGGESEPK5MBWO054 SecretKey: I9Zz+ukMi5fmG54D84uzBU6rxQJcadcxrM5vQI+R Docker安装docker pull minio/minio docker run -p 9000:9000 -e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=123456 -v /data:/data minio/minio server /data 登录浏览器浏览器输入: http://ip:9000 账户:admin 密码:123456

June 30, 2020 · 1 min · jiezi

http模块和fs模块

文章链接:http模块和fs模块http模块response对象常用方法: response.writeHead(200,{'Content-Type':'text/plain:charset=UTF-8'});此方法只能在消息上调用一次,并且必须在调用response.end()之前调用。 response.write()发送一块相应主体,用来给客户端发送相应数据。write可以使用多次,但是最后一定要使用end来结束响应,否则客户端会一直等待。response.end()此方法向服务器发出信号,表示已发送所有响应头和主体,该服务器应该视为此消息完成。必须在每个响应上调用方法response.end()。const http = require('http');http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('hello world'); res.write('<h1>hello node.js</h1>'); res.end();}).listen(8080);console.log('Server running at http://127.0.0.1:8080');request对象 request.url获取请求路径,获取到的是端口号之后的那一部分路径,也就是说所有的url都是以/开头的,判断路径处理响应。request.socket.localAddress获取ip地址。request.socket.remotePort获取源端口。const http = require('http');let server = http.createServer();server.on('request', function(req, res) { console.log('收到请求,请求路径是:' + req.url); console.log('请求我的客户端的地址是:', req.socket.remoteAddress, req.socket.remotePort); let url = req.url; res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'}); switch (url) { case '/': res.end('<h1>Index page</h1>'); break; case '/login': res.end('<h1>Login page</h1>'); break; default: res.end('404 Not Found.'); break; }});server.listen(8080, function() { console.log('服务器启动成功,可以访问了。。。');});fs模块所有文件系统操作都具有同步和异步的形式。异步方法中回调的第一个参数总是留给异常参数,如果方法成功完成,那么这个参数为null或undefined。 因为Node.js是单线程的,所以在Node.js中绝大部分需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码,否则,同步代码在执行期,服务器将停止响应。 服务器启动时如果需要读取配置文件,或结束时需要写入到状态文件时,可以使用同步代码,因为这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行。 ...

November 2, 2019 · 3 min · jiezi

node.js Buffer缓冲区和文件系统模块

Buffer 缓冲区Node的Buffer,是一个二进制数据容器,数据结构类似与数组,专门用于Node中数据的存放。Buffer的结构和数组很像,操作的方法也和数组类似。Buffer提供了Buffer.from、Buffer.alloc、Buffer.allocUnsafe、Buffer.allocUnsafeSlow四个方法来申请内存。具体看代码://Buffer是Node自带,不需要引入。//将一个字符串转换为bufferlet b = Buffer.from(“我是花花!”);console.log(b.length);//15 utf-8编码,一个中文字符占三个字节//创建一个指定大小的Buffer,Buffer.alloc(size[, fill[, encoding]])let bs = Buffer.alloc(10,“我是花花”);console.log(bs.toString());fs文件系统fs模块用于对系统文件及目录进行读写操作。在Node中,与文件系统的交互是非常重要的,服务器的本质就将本地的文件发送给远程的客户端。fs中提供了四种不同的方式读取和写入文件:1. 简单文件2. 同步文件3. 异步文件4. 流式文件同步和异步fs模块中所有的操作都有两种形式可供选择同步和异步。同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。首先引入fs模块:const fs = require(‘fs’);同步操作://模式w,打开文件用于写操作 , 如果不存在则创建,如果存在则覆盖//fs.openSync(path, flags[, mode]) 后两个参数可不填,下面的例子给了mode,所以记得前面给个空格let fSync = fs.openSync("./test.txt", ‘w’);fs.writeSync(fSync,“我就是测试一下”);fs.closeSync(fSync);异步操作://a,打开文件用于追加 , 如果不存在则创建let f = fs.open("./test02.txt", ‘a’,(err,fd)=>{ console.log(“11111111”); //回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined if(!err){ fs.writeFile(fd,“测试第二下”, (err)=>{ console.log(“22222222”); if(err){ throw err; } fs.close(fd,(err)=>{ console.log(“文件已关闭”); }) }) }else{ throw err; }});//这行代码会先执行console.log(“33333333”);stream 流let stream = fs.createWriteStream("./test03.txt");console.log(stream);stream.write(“哈哈哈”);stream.write(“嘿嘿嘿”);stream.write(“啧啧啧”);stream.end();//不能用close//事件监听stream.once(‘open’,()=>{ console.log(“WriteStream通道打开”);});//事件监听stream.once(‘ready’,()=>{ console.log(“WriteStream通道准备”);});//事件监听stream.once(‘close’,()=>{ console.log(“WriteStream通道关闭”);});图片等文件fs.readFile("../images/x.jpg", (err,data)=>{ console.log(err); console.log(data); if(!err){ fs.writeFile("../images/x_copy.jpg",data, (err)=>{ if(!err){ console.log(“复制成功!”); }else{ throw err; } }); }else{ throw err; }});其他fs打开文件的模式(权限):r 读取文件 , 文件不存在则出现异常r+ 读写文件 , 文件不存在则出现异常rs 在同步模式下打开文件用于读取rs+ 在同步模式下打开文件用于读写w 打开文件用于写操作 , 如果不存在则创建,如果存在则截断wx 打开文件用于写操作 , 如果 存在则打开失败w+ 打开文件用于读写 , 如果不存在则创建 , 如果存在则截断wx+ 打开文件用于读写 , 如果 存在则打开失败a 打开文件用于追加 , 如果不存在则创建ax 打开文件用于追加 , 如果路径存在则失败a+ 打开文件进行读取和追加 , 如果不存在则创建该文件ax+ 打开文件进行读取和追加 , 如果路径存在则失败 ...

December 20, 2018 · 1 min · jiezi