我的空间
  • 首页
  • 学无止尽
  • 常用工具
  • 留言板
  •  
首页>学无止尽>列表

各种媒体数据以base64编码方式直接嵌入网页中的写法

佚名2021-06-06网页 971° 0
png 图片: <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC"/>wav 文件: <audio controls="controls" autobuffer="autobuffer" autoplay="autoplay"> <sou

NodeJS对象数组Array根据对象object key的值排序sort

佚名2021-06-06编程 1805° 0
有个js对象数组 var ary=[{id:1,name:"c"},{id:3,name:"a"},{id:2,name:"d"},{id:4,name:"b"}];需求是根据name或者id的值来排序,这里有个风骚的函数。/** * 对数组中的对象,按对象的key进行sortType排序 * @param key 数组中的对象为object,按object中的key进行排序 * @param sortType true为降序;false为升序 */function keySort(key,sortType) { return function(a,b){ if (typ

nodejs读取图片返回给浏览器显示

佚名2021-06-06编程 676° 0
本文主要是使用nodejs处理图片等资源返回给浏览器显示方法,但不只限制于图片,也可以是音频视频等其他非字符串文件的返回和显示。也可以扩展成nodejs静态资源服务器的开发方法。请求头说明在http响应里面有几个重要的东西,Content-Type 说明文件渲染MIME类型,这是我们本文的相关处理关键。常用的MIME类型{ "css": "text/css", "gif": "image/gif", "html": "text/html", "ico": "image/x-icon", "jpeg": "image/jpeg", "jpg": "image/jpeg", "js": "tex

mime模块响应或设置Node.js的Content-Type头

佚名2021-06-06编程 625° 0
MIME,即:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型。其主要用途是设置某种扩展名的文件的响应程序类型,我们可以认为是当指定扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。在HTTP中,是通过名为Content-Type的HTTP头来设置或响应对应的文件类型的。例如:当服务器要向客户端发送的内容图类为.jpg图片,就需要将Content-Type头设置为image/jpeg,而客户端同样会根据Content-Type对服务器内容进行解析。MIME和Content-Type是文件类型设置和解板的标准。当服务器要对某种扩展名文件

当客户端想要下载文件时,nodejs服务端如何根据URL设置响应头的Content-Type类型

佚名2021-06-06编程 684° 0
下面就是一个json格式的文件,包含了所有后缀名格式对应的Conent-Type类型。{ ".323": "text/h323", ".3gp": "video/3gpp", ".aab": "application/x-authoware-bin", ".aam": "application/x-authoware-map", ".aas": "application/x-authoware-seg", ".acx": "application/internet-property-stream", ".ai": "application/posts

nodejs的缓存文件和使用进程

佚名2021-06-06编程 669° 0
存缓存是前后端数据交互很重要的一部分,利用缓存可以节约网络带宽,节省花销,具体的实现步骤如下:const http = require("http");const url = require("url");const fs = require("fs");let server = http.createServer((req,res)=>{ let {pathname} = url.parse(req.url); //读取文件的信息 fs.stat(`www${pathname}`,(err,stat)=>{ if(err){ res.w

node.js中的buffer.slice方法使用说明

佚名2021-06-21编程 607° 0
方法说明:返回一个新的buffer对象,这个新buffer和老buffer公用一个内存。但是被start和end索引偏移缩减了。(比如,一个buffer里有1到10个字节,我们只想要4-8个字节,就可以用这个函数buf.slice(4,8),因为他们共用一个内存,所以不会消耗内存,)因为共用内存,所以修改新的buffer后,老buffer的内容同样也会被修改。语法:buffer.slice([start], [end])接收参数:start 开始位置,默认end 结束位置,默认为buffer长度例子:用ASCII码字母表创建一个buffer,用一下slice函数,然后修改

node.js实现PDF转图片

佚名2021-06-24编程 2206° 0
https://www.npmjs.com/package/pdf-image转换简单页面:var PDFImage = require("pdf-image").PDFImage; var pdfImage = new PDFImage("/tmp/slide.pdf");pdfImage.convertPage(0).then(function (imagePath) { // 0-th page (first page) of the slide.pdf is available as slide-0.png fs.existsSync("/tmp/slide-0.png") //

visual studio运行node.js控制台闪退

佚名2021-06-29软件 1084° 0
打开选项,将两个等待输入的勾选上。将异常设置里的Uncaught Exceptions也勾选上。

nodejs简易Socket.io聊天室开发

佚名2021-06-29编程 648° 0
); }); }); </script></head><body> <input id="text" type="text" /><button id="send">发送</button> <div id="conversation"></div></body></html>

NodeJS使用mkdir创建多级目录

佚名2021-06-30编程 922° 0
NodeJS 10以后的版本,fs.mkdir已经增加递归选项了。参考文档:NodeJS File System//异步fs.mkdir('d:\\a\\b\\c\\', { recursive: true }, (err) => { if (err) console.log(err);});//同步fs.mkdirSync('d:\\a\\b\\c\\', { recursive: true });

NodeJS javascript-obfuscator error: “All stringArrayEncoding's elements must be unique”

佚名2021-08-31编程 2172° 0
将javascript-obfuscator混淆配置选项里的stringArrayEncoding: 'base64'改为stringArrayEncoding: ['base64'];

nodejs判断IP版本

佚名2021-09-03编程 1439° 0
const net = require("net");console.log(net.isIP('color'));console.log(net.isIP('127.0.0.1'));console.log(net.isIP('fe80::5c33:4dbb:a17b:9e86%18'));console.log('----------');console.log(net.isIPv4('color'));console.log(net.isIPv4('127.0.0.1'));console.log(net.isIPv4('fe80::5c33:4dbb:a17b:9e86%18'));

The module was compiled against a different Node.js version using

佚名2021-06-06编程 837° 0
执行命令npm rebuild

使用Node Supervisor实现监测文件修改并自动重启应用

佚名2017-09-22编程 1396° 0
在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRL C终止程序,然后再重新启动,即使是修改一点小小的参数,也总是要不断地重复这几个很烦人的操作。有没有办法做到当文件修改之后,Node.js自动重新启动(或重新加载文件)以节省时间呢?一开始我是想到用grunt的watch模块来监控文件变化,但后来在网上一查,原来我们想到的,别人早已想到,并且已经做得很好。Node Supervisor正是这样一个可以实现这种需求的Node.js模块。根据Github上的说明,Node Supervisor原本是用于服务器上Node.js应用崩溃的时候,自己重新启动。当然它也可以监

用NODEJS处理EXCEL文件导入导出

佚名2017-09-22编程 1626° 0
对比了 ExcelJS , https://github.com/guyonroche/exceljs#create-a-workbooknode-xlsx ,https://github.com/mgcrea/node-xlsx等 nodejs 等现有组件,决定使用node-xlsx。node-xlsx 基于现有前端强大组件 js-xlsx, https://github.com/SheetJS/js-xlsx使用例子:var express = require(&#39;express&#39;); var router = express.Router(); var xlsx =

node Error: Could not locate the bindings file. Tried:

admin2019-10-11编程 2074° 0
重装系统后把nodejs项目中的node_modules文件夹手动删除,想重新安装,但是中间在安装一个模块的时候报错Error: Could not locate the bindings file. Tried:一直安装不上,经过不断尝试终于解决了。1、安装Python2。2、安装node模块。npm install --global --production windows-build-toolsnpm install -g node-gyp3、还有就是要到控制面板将.NET安装上去。

node实现图片验证码接口

佚名2019-12-06编程 1156° 0
一、安装依赖1.引入插件npm install svg-captcha在使用的地方导入var svgCaptcha = require('svg-captcha');app.js中引入cookie-paraseconst cookieParase = require('cookie-parser');app.use(cookieParase());二、随机字母验证码router.get("/getCaptcha",function(req, res, next){ var captcha = svgCaptcha.create({ inverse: false, // 翻转

如何在CentOS 7服务器上安装NodeJS

佚名2019-12-01软件 780° 0
你可以通过运行以下命令。sudo yum install epel-release现在可以使用yum命令安装Node.js了。sudo yum install nodejs因为在开发过程中我需要管理节点包,我还要安装新公共管理的软件包管理器,使用以下命令。sudo yum install npm

NodeJs处理文件

佚名2019-12-19编程 863° 0
Node的文件处理涉及到前面说的ptah模块,以及fs文件系统、stream流处理、Buffer缓冲器等模块。内容可能比较多,相关内容请以官网文档为主,此处主要以案例讲解为主,分享给大家一些常用的经典案例。细节就不展开了。fs文件系统fs模块提供了很多文件操作相关的api,比如:监控文件夹、文件,文件重命名,文件读写,文件修改权限、文件读写流等。在此,我们仅以几个案例的方式来驱动学习Node的文件系统,细节请详细阅读Node的api文档或者源码。案例:如何监控文件夹的变化?如何读取一个文件?如何把内容写入另外一个文件?文件件读取、文件重命名、移动等各种功能如何监控文件夹的变化?fs模块提供了

Nodejs获取服务端IP地址

佚名2019-12-23编程 1212° 0
const os = require('os');///////////////////获取本机ip///////////////////////function getIPAdress() { var interfaces = os.networkInterfaces(); for (var devName in interfaces) { var iface = interfaces[devName]; for (var i = 0; i < iface.length; i++) { var alias = iface[i];

node同步读取readFileSync和异步读取readFile的区别

佚名2019-12-24编程 1124° 0
候由操作系统在后台进行读取,不会阻碍下面的代码执行。同步读取的时候会阻碍下面的代码执行。再案例:test.jsvar fs = require('fs'); //引入fs模块console.log('start async read'); //异步读取开始fs.readFile('test2.js',function(error,date){ //读取文件,回调函数第一个参数表示错误信息,第二个参数为读取的文本内容 if(error){ console.log(error); }else{ consol

node插件http-proxy实现反向代理

佚名2019-12-27编程 1046° 0
在项目下面新建一个app.js文件,内容如下:var http = require('http'), httpProxy = require('http-proxy'); // 新建一个代理 Proxy Server 对象 var proxy = httpProxy.createProxyServer({}); // 捕获异常 proxy.on('error', function (err, req, res) { res.writeHead(500, { 'Content-Type': 'text/plain' }); res.end('Some

node.js使用http-proxy创建代理服务器

佚名2020-05-16编程 1343° 0
问外面的服务。反向代理:帮助外面的用户访问局域网内部的服务。一、安装http-proxynpm install http-proxy --save二、代理本地服务const http = require('http');const httpProxy = require('http-proxy'); //创建一个代理服务const proxy = httpProxy.createProxyServer(); //创建http服务器并监听8888端口let server = http.createServer(function (req, res) { //将用户的请求转发到本地9999

js抽象语法树

佚名2019-12-29编程 1156° 0
JavaScript Parser,把js源码转化为抽象语法树的解析器。浏览器会把js源码通过解析器转为抽象语法树,再进一步转化为字节码或直接生成机器码。一般来说每个js引擎都会有自己的抽象语法树格式,Chrome的v8引擎,firefox的SpiderMonkey引擎等等,MDN提供了详细SpiderMonkey AST format的详细说明,算是业界的标准。发展到现在可能不同的JavaScript Parser的AST格式会不同,或基于SpiderMonkey AST format,或重新设计自己的AST format,或基于SpiderMonkey AST format优化改进。通过

遍历AST语法树

佚名2020-01-04编程 2030° 0
利用AST解析function ast(){}const esprima = require('esprima');//解析js的语法的包const estraverse = require('estraverse');//遍历树的包const escodegen = require('escodegen');//生成新的树的包let code = 'function ast(){}';//解析js的语法let tree = esprima.parseScript(code);//遍历树estraverse.traverse(tree, { enter(node) { c

escodegen.generate函数选项

佚名2020-01-09编程 1583° 0
syntaxescodegen.generate(AST[, options]);optionsdefault options, { format: { indent: { style: ' ', base: 0, adjustMultilineComment: false }, newline: '\n', space: ' ', json: false,

Node.js安全清单

佚名2020-08-09编程 1127° 0
环境来给千万用户使用之前,做一个安全检查。以下列出的安全项,大多都具有普适性,适用于除了Node.js外的各种语言和框架。但是,其中也包含一些用Node.js写的小工具。配置管理安全性相关的HTTP头以下是一些安全性相关的HTTP头,你的站点应该设置它们:Strict-Transport-Security:强制使用安全连接(SSL/TLS之上的HTTPS)来连接到服务器。X-Frame-Options:提供对于“点击劫持”的保护。X-XSS-Protection:开启大多现代浏览器内建的对于跨站脚本攻击(XSS)的过滤功能。X-Content-Type-Options: 防止浏览器使用MIM

JS Esprima基本用法

佚名2020-01-19编程 1135° 0
1、基础扫盲Esprima 是一个用于对 JS 代码做词法或者语法分析的工具体验网址只支持js,不支持 flow 或者 typescript 格式当前最新版本是4.0,主要提供两个API:parseScript 解析不包含 import 和 export 之类的js 代码parseModule 解析含 import 和 export 之类的js 代码4.0 以下的版本仅支持 parse 方法,需自行判断是 script 还是 module语法格式esprima.parseScript(input, config, delegate)esprima.parseModule(input, con

cheerio中文文档

佚名2020-01-17编程 921° 0
rio = require('cheerio'),$ = cheerio.load('<h2 class = "title">Hello world</h2>');$('h2.title').text('Hello there!');$('h2').addClass('welcome');$.html();//=> <h2 class = "title welcome">Hello there!</h2>安装npm install cheerio特点熟悉的语法:cheerio实现了jQuery的一个子集,去掉了jQuery中所有与DOM不一致或者是用来填浏览器的坑的东西,重现了jQuery最

简易静态 Javascript 反混淆

佚名2020-01-17编程 1184° 0
最近在研究一些 XSS 蠕虫的时候遇到了类似如下代码混淆:观察其代码风格,发现这个混淆器做了这几件事:字符串字面量混淆:首先提取全部的字符串,在全局作用域创建一个字符串数组,同时转义字符增大阅读难度,然后将字符串出现的地方替换成为数组元素的引用。变量名混淆:不同于压缩器的缩短命名,此处使用了下划线加数字的格式,变量之间区分度很低,相比单个字母更难以阅读。成员运算符混淆:在 Javascript 中,window[‘top’] 和 window.top 是等价的。混淆器便利用这一特性,将成员访问复杂化,首先替换成字符串,然后对字符串进行混淆。经过我的搜索,这样的代码很有可能是通过 javasc

Esprima语法树结构详解

佚名2020-01-19编程 1410° 0
Identifier标识符,我觉得应该是这么叫的,就是我们写 JS 时自定义的名称,如变量名,函数名,属性名,都归为标识符。相应的接口是这样的:interface Identifier <: Expression, Pattern { type: "Identifier"; name: string;}一个标识符可能是一个表达式,或者是解构的模式(ES6 中的解构语法)。我们等会会看到 Expression和 Pattern 相关的内容的。Literal字面量,这里不是指 [] 或者 {} 这些,而是本身语义就代表了一个值的字面量,如 1,“hello”, true 这些,还有正

fs.existsSync(path)

佚名2020-01-21编程 1131° 0
path <string> | <Buffer> | <URL>返回: <boolean>如果路径存在,则返回 true,否则返回 false。有关详细信息,参阅此 API 的异步版本的文档:fs.exists()。虽然 fs.exists() 已废弃,但 fs.existsSync() 不是废弃的。 fs.exists() 的 callback 参数接受与其他 Node.js 回调不一致的参数。 fs.existsSync() 不使用回调。if (fs.existsSync('/etc/passwd')) { console.log('文件已存在');}

RequestError: Statement(s) could not be prepared.

admin2020-02-11编程 2032° 1
nodejs使用sql server查询数据,报RequestError: Statement(s) could not be prepared.错误,后来发现是使用参数化的查询方法,但是没有给足参数。

nodejs dns查询

佚名2020-02-14编程 921° 0
dns.lookup(hostname[, options], callback)hostname <string>options <integer> | <Object>family <integer> 记录的地址族。必须为 4、 6 或 0。0 值表示返回 IPv4 和 IPv6 地址。默认值: 0。hints <number> 一个或多个受支持的 getaddrinfo 标志。可以通过按位 OR 运算它们的值来传递多个标志。all <boolean> 当为 true 时,则回调将会返回数组中所有已解析的地址。否则,返回单个地址。默认值: false。verbatim <boolean>

nodejs实现DNS解析服务器

佚名2020-02-14编程 1009° 0
// The regular expression keyword in domain name.const domain = /hursing/;// When keyword matched, resolve to this IP.const targetIp = '127.0.0.1';// When keyword not matched, use the fallback dns server to resolve.const fallbackServer = '10.0.0.1';const dgram = require('dgram');const server = dgra

nodejs取到对象数组中某个属性的值,并返回一个数组

佚名2020-02-17编程 1553° 0
var result = detailList.map(function(item) { return item.Id;});

ES6语法

佚名2020-02-25编程 956° 0
1.ES5和ES6声明变量的方式对比ES5中声明变量的方式://1.通过var声明var num;//2.函数方式声明function fn(num){ return num; }fn(10);ES6中声明变量的方式://1.使用let声明let a = 10;//2.使用const声明const name = "小红";2. var ,let , const 的区别:不存在变量提升var 命令会发生变量提升现象,即变量可以在声明之前使用,值为undefined。let 和 const 则没有变量声明提升的功能,必须要先声明才能使用不允许重复声明var命令能重复声明,后者覆盖前者let 和

nodejs处理url中的百分号编码

佚名2020-02-25编程 1105° 0
写网站的时候,前端表单发送数据到nodejs服务器,发送的数据会出现一些乱码,像下面这样:nickname=%E5%B0%8F%E5%88%98&gender=%E7%94%B7&email=12345%40qq.com&password=xiaoliu百分号编码原理上网查了后发现,百分号编码(也被称为URI编码)的产生是为了防止SQL注入,所以将一些特殊字符转换为对应的百分号编码。nodejs如何解码这里主要讲几种百分号编码nodejs环境下的解码方式。decodeURI()函数let url = "nickname=%E5%B0%8F%E5%88%98&gender=%E7%94%B7&

nodejs接收处理表单信息

佚名2020-04-12编程 889° 0
在这个实例中,我们需要用到nodejs的http模块。具体的思路如下:你需要先创建一个 http 的实例,在其请求处理函数中手动编写req 对象的事件监听器。当客户端数据到达时,将 POST 数据暂存在闭包的变量中,直到 end事件触发,解析 POST 请求,处理后返回客户端。html页面(index.html):<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html lang="en"><head> <meta http-equiv="Content

webstorm2019激活码

佚名2020-04-14软件 1150° 0
K6IXATEF43-eyJsaWNlbnNlSWQiOiJLNklYQVRFRjQzIiwibGljZW5zZWVOYW1lIjoi5o6I5p2D5Luj55CG5ZWGOiBodHRwOi8vaWRlYS5oay5jbiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjAxOS0wNi0w

express-http-proxy使用方法

佚名2020-05-15编程 937° 0
express-http-proxy是一个express代理中间件,其用法如下: 安装 npm install express-http-proxy用法 proxy(host, options);例如,将路由为'/proxy'的请求转发至‘www.google.com’:则可用下列语句实现 var proxy = require('express-http-proxy'); var app = require('express')(); app.use('/proxy', proxy('www.google.com'));Options forwardPath forwardPath选项用于

TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be one of type string, Buffer, TypedArray, or DataView. Received type undefined

佚名2020-05-19编程 5149° 0
ror [ERR_INVALID_ARG_TYPE]: The "data" argument must be one of type string, Buffer, TypedArray, or DataView. Received type undefined原因:Node后端 express框架,代码如下:app.get(path, function(req, resp) { // ... resp.write(somethind);});要写回浏览器页面的数据something的类型不是string或Buffer(可能是一个对象)。转换类型即可:resp.write(JSON.s

Error: SQLITE_RANGE: column index out of range

admin2020-05-19编程 1854° 0
nodejs使用sqlite数据库插入数据时报错[Error: SQLITE_RANGE: column index out of range] { errno: 25, code: 'SQLITE_RANGE'}后来发现是占位符的问题,将@占位符改成$占位符问题解决。

nodejs集成sqlite

佚名2020-05-20编程 900° 0
正在物色node上面的轻量级嵌入式数据库,作为嵌入式数据库的代表,sqlite无疑是个理想的选择方案。npm上集成sqlite的库主要有两个——sqlite3和realm。realm是一个理想的选择方案,它最初是为移动app设计的,在node也可以运行的,但是不支持Windows系统。sqlite3是一个专为nodejs设计的,在nodejs上面生态更健壮,因此最终选择sqlite3。sqlite3几乎支持所有版本的nodejs,同时也可以和nwjs集成。安装基于npm安装npm install sqlite3这样除了安装完sqlite3的npm包,最主要的是也装完了sqlite数据库,因为

nodejs安装webpage

佚名2020-05-23编程 1053° 0
全局安装webpage命令行:npm install webpage -g注意:如果这里安装失败,可以先安装淘宝镜像:npm install -g cnpm --registry=https://registry.npm.taobao.org再通过命令安装webpage。cnpm install webpage -g

nodejs使用Phantomjs爬取动态页面

佚名2020-05-24编程 973° 0
phantomjs实现了一个无界面的webkit浏览器。虽然没有界面,但dom渲染、js运行、网络访问、canvas/svg绘制等功能都很完备,在页面抓取、页面输出、自动化测试等方面有广泛的应用。安装下载phantomjs(官方下载)。解压到任意目录,并将包含phantomjs.exe的目录添加到系统路径。如果要借助phantomjs进行无头测试,请参考各个测试框架的说明,或者参考phantomjs的官方文档。使用说明简单示例// test.jsvar page = require('webpage').create(), system = require('system'), addres

nodejs日期格式化

佚名2020-06-17编程 620° 0
格式化的日期 * * 示例:format(new Date(),'yyyy-MM-dd hh:mm:ss'); * 返回值为字符串 */ function dateFormat (date,fmt) { var o = { "M+": date.getMonth() + 1, //月份 "d+": date.getDate(), //日 "h+": date.getHours(), //小时 "m+": date.getMinutes(), //分 "s+": date.getSeconds(), //秒

Nginx浏览目录配置

佚名2020-06-24软件 847° 0
命令默认值值域作用域EGautoindexoffon:开启目录浏览;off:关闭目录浏览http, server, locationautoindex on;打开目录浏览功能autoindex_formathtmlhtml、xml、json、jsonp 分别用这几个风格展示目录http, server, locationautoindex_format html; 以网页的风格展示目录内容。该属性在1.7.9及以上适用autoindex_exact_sizeonon:展示文件字节数;off:以可读的方式显示文件大小http, server, locationautoindex_exact_s

Node.js http.request()返回响应出现乱码

佚名2020-07-11编程 1085° 1
用Node.js做个小程序,用的是http.request(option,callback)方法,但返回的请求出现了乱码的问题。代码如下:var http=require('http');var options={ hostname:'...', port:80, path:'/bt.php?'+searchstring, method:'GET'};var req=http.request(options,(res)=>{ var header=res.headers; console.log(`STATUS: ${res.statusCode}`); conso

我是有底线的
分类
数据库编程游戏网页系统办公软件网络设计影音硬件数学手机
猜您喜欢
  • Makelangelo图片转艺术Gcode3658
  • 尝试访问启动磁盘设置时出错4283
  • 让浏览器用极速模式打开网站而不是兼容模式4008
  • CSS3 text-decoration-style 属性2020
  • 文字和图片对齐方式3045
  • Outlook 0x800CCC0F 错误2933
  • unity3d绘制地面2448
  • QT安装配置教程3109
  • hp1020打印机连续打印卡纸3765
  • 删除顶部Word表格前面的空白段落3273

标签云

C#

.NET

ASP.NET

JavaScript

NodsJs

CSS

Windows

3DS Max

AutoCAD

jQuery

Bootstrap

SQL

Visual Studio

WebStorm

Photoshop

Office

BIOS

Nginx


全民云计算
全民云计算

Copyright © 2018  我的空间  闽ICP备17023514号-2