有知道nodejs fs模块的FS 包怎 样下吗

1574人阅读
Node.js编程时fs.renameSync出错,错误信息如下:
fs.js:543 &return binding.rename(pathModule._makeLong(oldPath),
Error: EXDEV, cross-device link not permitted 'C:\Users\Jonsan\AppData\Local\Temp\28f357d322afb8ea920b19'
解决方案:
var is = fs.createReadStream(files.upload.path);
var os = fs.createWriteStream(&F:\\node\\picture\\test.png&);
is.pipe(os);
is.on('end',function(){
fs.unlinkSync(files.upload.path);
//fs.renameSync(files.upload.path, &F:\\node\\picture\\test.png&);
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:134259次
积分:2480
积分:2480
排名:第7872名
原创:97篇
转载:31篇
评论:35条
(1)(4)(1)(2)(12)(4)(3)(3)(1)(2)(1)(1)(2)(1)(2)(1)(1)(9)(8)(1)(4)(5)(4)(4)(6)(9)(4)(1)(2)(1)(1)(1)(1)(2)(7)(5)(4)(9)(6)(1)(2)(1)(1)我的NodeJs学习小结(一) - CSDN博客
这第一篇就谈谈NodeJs的一些编程细节吧。
& & 1、遍历数组
for (var i=0, l=arr. i&l; i++)
& & 这样写的一个好处就是让每次循环少一步获取数组对象长度的操作,数组长度越长,价值越明显。
& & 2、判断变量的真假
if (a) {...} //a='', a='0', a=[], a={}
& & if条件判断的结果分别是:false, true, true, true。这个结果和PHP的结果是不同的,不要混淆。还需要区分它和非恒等判断相似的情况。
& & 3、0值非恒等判断
1 if (0 == '0') {...} //true2 if (0 == []) {...} //true3 if (0 == [0]) {...} //true4 if (0 == {}) {...} //false5 if (0 == null) {...} //false6 if (0 == undefined) {...} //false
& & 其实还有很多这种诡异的判断,我只列出了较为常见的。如果想弄明白其中的规则,请参阅我的另一篇博文:【JavaScript】深入分析JavaScript的关系运算和if语句。
& & 4、parseInt的陷阱
var n = parseInt(s); //s='010'
& & 该语句执行后n值为8,而不是10。虽然很多人知道这一点,但是编程中难免会出错,我深有体会。所以,最好按下面的方式来写,就不会出错了。
var n = parseInt(s, 10);
& & 5、变量在使用前一定要先声明
& & 虽然,直接使用变量而不声明也不会出错,但是,这样写是很容易出错的。因为解释器会把它解释成全局变量,很容易和其他全局变量重名而导致出错。所以,一定要养成变量使用前要先声明的好习惯。
& & 6、循环中存在异步的情况
for (var i=0, l=arr. i&l; i++) {   var sql = &select * from nx_user&;
db.query(sql, function(){
sys.log(i + ': ' + sql);
}); //db.query为表查询操作,是异步操作}
& & 你会发现,输出的结果都是相同的,而且是当i=arr.length-1时的输出内容。因为JavaScript是单线程的,它会先执行完整个循环的同步内容之后,才去执行其中的异步操作。代码中的匿名回调函数就是一个异步回调。执行到该函数的时候,for循环以及后面的一些同步操作都已经执行完毕。出于闭包原则,该函数会保留for循环的最后一次循环的sql变量和i变量的内容,所以才会导致错误的结果。
& & 那怎么办呢?解决方法有两种,一种是使用立即函数,如下:
for (var i=0, l=arr. i&l; i++) {  var sql = &select * from nx_user&;
(function(sql, i){
db.query(sql, function(){
sys.log(i + ': ' + sql);
}); //db.query为表查询操作,是异步操作
})(sql, i);}
& & 还有一种方法是将异步操作部分提取出来,单写一个函数,如下:
var outputSQL = function(sql, i){
db.query(sql, function(){
sys.log(i + ': ' + sql);
}); //db.query为表查询操作,是异步操作}for (var i=0, l=arr. i&l; i++) {  var sql = &select * from nx_user&;
outputSQL(sql, i); }
& & 7 、在对大量数据作处理时,尽量避免循环嵌套。
& & 因为循环嵌套的处理时间会随着数据量的增加成指数级增长,所以应尽量避免。遇到这种情况,如果没有更好的办法,一般采取的策略是以空间换时间,即建立一张二级循环数据的Hash映射表。当然,还要具体情况具体分析。还有一点要说的是,某些方法本身就是一个循环体,如Array.sort()(该方法应该是用了两层循环实现),在使用的时候需加注意。
& & 8、尽量避免递归调用。
& & 递归调用的优点是代码简洁,实现简单,而它的缺点很重要,说明如下:
& & (1)函数栈的大小会随着递归层次成线性增长,而函数栈是有上限值的,当递归达到一定层数后函数栈就会溢出,从而导致程序出错;
& & (2)每递归一层都会增加额外的压栈和出栈操作,即函数调用过程中的保存现场和恢复现场。
& & 所以,应尽量避免递归调用。
& & 9、关于模块文件的作用域隔离。
& & Node在编译JavaScript模块文件的时候,已经对其内容进行了头尾包装,如下:
(function(exports, require, module, __filename, __dirname){
你的JavaScript文件代码});
& & 从而使每个模块文件之间进行了作用域隔离。所以,当你编写NodeJs模块文件的时候,不需要自己再加一层作用域隔离封装了。如下面的代码格式,只会额外增加一层函数调用,是不推荐的:
(function(){
... ...})();
& & 10、数组和对象不要混用
& & 下面是错误代码的示例:
var o = [];o['name'] = 'LiMing';
& & 数组和对象混用可能会导致不可预知的错误。我的一个同事就遇到过一个很奇怪的问题,先看代码:
var o = [];o['name'] = 'LiMing';var s = JSON.stringify(o);
& & 他本以为对象o的name属性会在JSON串中,结果就是没有。当时我也很奇怪,但我有预感到是数组和对象混用的问题,试了一下,果然是它的问题。后来我在ECMA规范中查到,数组在序列化时是按JA规则进行的。所以,要养成一个好的编程习惯,正确使用数组和对象,不要混用。
& & 11、promise优雅编程
& & 相信接触过nodeJs的人都有过这样的体验,当异步回调里嵌套异步回调的时候,代码就显得很混乱,缺乏易读性。nodeJs的这一窘境可以借助promise来克服。promise就像一个雕琢器,让你的代码变得优雅、美观。promise有个A+规范,网上有几种实现方式,可以参阅。
您可能感兴趣的文章:
jQuery Deferred和Promise创建响应式应用程序详细介绍Nodejs中自定义事件实例nodejs文件操作模块FS(File System)常用函数简明总结nodejs获取本机内网和外网ip地址的实现代码跟我学Nodejs(一)--- Node.js简介及安装开发环境利用NodeJS和PhantomJS抓取网站页面信息以及网站截图基于promise.js实现nodejs的promises库
& & QQ空间 新浪微博 腾讯微博 搜狐微博 人人网 开心网 百度搜藏更多
& &&Tags:NodeJs
& & 复制链接收藏本文打印本文关闭本文返回首页
& & 上一篇:nodejs中使用monk访问mongodb
& & 下一篇:基于promise.js实现nodejs的promises库
我的Node.js学习之路(二)NPM模块管理什么是Node.js?Node.js详细介绍Node.js(安装,启动,测试)nodejs之请求路由概述使用upstart把nodejs应用封装为系统服务实例NODE.JS加密模块CRYPTO常用方法介绍connect中间件session、cookie的使用方法分享Nodejs进程管理模块forever详解我的Node.js学习之路(一)nodejs文件操作模块FS(File System)常用函数简明总结
最 近 更 新
connect中间件session、cookie的使用方法在Node.js中实现文件复制的方法和实例Node.js中对通用模块的封装方法node.js正则表达式获取网页中所有链接的代node.js WEB开发中图片验证码的实现方法Nodejs中自定义事件实例node.js实现逐行读取文件内容的代码nodejs npm包管理的配置方法及常用命令介使用GruntJS构建Web程序之Tasks(任务)篇我的NodeJs学习小结(一)
热 点 排 行
nodejs文件操作模块FS(File Sysnodejs获取本机内网和外网ip地址Nodejs sublime text 3安装与配置node.js WEB开发中图片验证码的实NODE.JS加密模块CRYPTO常用方法介Node.js(安装,启动,测试)node.js应用后台守护进程管理器Fnodejs npm install全局安装和本node.js实现多图片上传实例nodejs npm包管理的配置方法及常推荐这篇日记的豆列
······& 快速创建基于npm的nodejs库
快速创建基于npm的nodejs库
,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!
张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
转载请注明出处:
用Node实现的功能越来越多,代码越来越复杂,我们就开始考虑如何把代码从项目中抽出来,形成单独的类库(模块)管理。就像我们所依赖其他第三方类库一样。
本文将介绍如何定义开发一个类库,包括命令开发,发布到npm中,让其他人也可以使用。
npm是什么?
快速创建包
创建命令行工具
本地安装lowercase包
项目上传到github
通过npm发布包
通过npm安装包
1. npm是什么?
NPM的全称是,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块的标准。
Nodejs自身提供了基本的模块,但是开发实际应用过程中仅仅依靠这些基本模块则还需要较多的工作。幸运的是,Nodejs库和框架为我们提供了帮助,让我们减少工作量。但是成百上千的库或者框架管理起来又很麻烦,有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
类似于Java中的Maven,Ubuntu中的apt-get, Ruby中的Gem, Python中pypi等…
NPM模块发布页:
2. 快速创建包
项目描述:读取文件,把所有的大写文字转换成小写文字,控制台输出。
系统环境:
win7 64bit
Nodejs:v0.10.5
Npm:1.2.19
~ D:\workspace\javascript>mkdir nodejs-package && cd nodejs-package
创建项目结构
~ D:\workspace\javascript\nodejs-package>mkdir bin
~ D:\workspace\javascript\nodejs-package>touch bin/lowercase
~ D:\workspace\javascript\nodejs-package>touch bin/lowercase.bat
~ D:\workspace\javascript\nodejs-package>mkdir test
~ D:\workspace\javascript\nodejs-package>mkdir test/data
~ D:\workspace\javascript\nodejs-package>touch test/data/sample.txt
~ D:\workspace\javascript\nodejs-package>touch lowercase.js
~ D:\workspace\javascript\nodejs-package>touch example.js
~ D:\workspace\javascript\nodejs-package>touch README.md
项目结构说明
bin目录: 用于存放命令的目录
bin/lowercase文件: Linux命令行可执行文件
bin/lowercase.bat文件: Win命令行可执行文件
test目录: 用于存放测试代码的目录
test/data目录: 用于存放测试数据的目录
test/data/sample.txt: 测试数据文件
lowercase.js文件: 核心功能代码文件
example.js文件: 例子代码文件
package.json文件: 项目描述及依赖文件
README.md文件: 项目说明文件
1). 创建文件:package.json
~ D:\workspace\javascript\nodejs-package>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install
--save` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
name: (nodejs-package) lowercase
version: (0.0.0) 0.0.1
description: A demo package
entry point: (index.js)
test command:
git repository:
author: Conan Zhang
license: (BSD) MIT
About to write to D:\workspace\javascript\nodejs-package\package.json:
"name": "lowercase",
"version": "0.0.1",
"description": "A demo package",
"main": "index.js",
"directories": {
"test": "test"
"dependencies": {
"moment": "~2.4.0"
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"repository": "",
"author": "Conan Zhang",
"license": "MIT",
"readmeFilename": "README.md"
Is this ok? (yes) yes
npm WARN package.json lowercase@0.0.1 No readme data!
修改文件:package.json
~ vi package.json
"name": "lowercase_demo",
"version": "0.0.1",
"description": "A demo package of lowercase",
"keywords":[
"demo","lowercase"
"author": "Conan Zhang
(http://blog.fens.me)",
"license": "MIT",
"main": "lowercase.js",
"repository": {
"type":"git",
"url":"/bsspirit/lowercase_demo"
"engines": {
"node": ">=v0.10.5"
"readmeFilename": "README.md"
2). 编辑文件:lowercase.js
~ vi lowercase.js
"use strict"
var fs = require('fs');
exports.lowerCase = function (myfile) {
console.log(myfile);
if (fs.existsSync(myfile)) {
var content = fs.readFileSync(myfile, 'utf8');
console.log(content.toLowerCase());
console.log("File does not exist - " + myfile);
3). 编辑文件:example.js
~ vi example
"use strict"
var lowercase = require('./lowercase.js');
var myfile="test/data/sample.txt"
lowercase.lowerCase(myfile);
4). 编辑文件:test/data/sample.txt
~ vi sample.txt
5). 运行:example.js
~ D:\workspace\javascript\nodejs-package>node example.js
test/data/sample.txt
6). 编辑文件:README.md
~ vi README.md
========================
A demo package of lowercase
npm install lowercase_demo
Conan Zhang, http://blog.fens.me
## License
3. 创建命令行工具
1). 编辑文件:bin/lowercase
~ vi lowercase
#!/usr/bin/env node
var myfile = process.argv.slice(2);
var path = require('path');
var fs = require('fs');
var dir = path.dirname(fs.realpathSync(__filename))+"/../";
require(dir+'lowercase.js').lowerCase(dir+myfile);
2). 编辑文件:bin/lowercase.bat
~ vi lowercase.bat
node.exe bin/lowercase %1
3). 运行lowercase.bat
~ D:\workspace\javascript\nodejs-package>bin\lowercase.bat test\data\sample.txt
D:\workspace\javascript\nodejs-package>node.exe bin/lowercase test\data\sample.txt
D:\workspace\javascript\nodejs-package\bin/../test\data\sample.txt
4. 本地安装lowercase包
新建项目,并安装lowercase依赖库
~ D:\workspace\javascript>mkdir nodejs-package-project && cd nodejs-package-project
~ D:\workspace\javascript\nodejs-package-project>npm install ..\nodejs-package
lowercase_demo@0.0.1 node_modules\lowercase_demo
新建运行文件:app.js
~ vi app.js
var lowercase = require('lowercase_demo');
var myfile="data.txt"
lowercase.lowerCase(myfile);
数据文件: data.txt
~ vi data.txt
运行app.js
~ D:\workspace\javascript\nodejs-package-project>node app.js
5. 项目上传到github
把lowercase_demo库,上传到github。
~ git init
~ git add .
~ git commit -m 'init'
~ git remote add origin :bsspirit/lowercase_demo.git
~ git push origin master
项目github地址:
注:大家可以基于这个demo项目基础上,继续完成包的开发。
5. 通过npm发布包
在npm上,注册新用户
~ D:\workspace\javascript\nodejs-package>npm adduser
Username: bsspirit
npm http PUT https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http 409 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http GET https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http 200 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http PUT https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit/-rev/2-25eae
npm http 201 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit/-rev/2-25eae
在npm上,发布项目
~ D:\workspace\javascript\nodejs-package>npm publish
npm http PUT https://registry.npmjs.org/lowercase_demo
npm http 201 https://registry.npmjs.org/lowercase_demo
npm http GET https://registry.npmjs.org/lowercase_demo
npm http 200 https://registry.npmjs.org/lowercase_demo
npm http PUT https://registry.npmjs.org/lowercase_demo/-/lowercase_demo-0.0.1.tgz/-rev/1-162a1
npm http 201 https://registry.npmjs.org/lowercase_demo/-/lowercase_demo-0.0.1.tgz/-rev/1-162a1
npm http PUT https://registry.npmjs.org/lowercase_demo/0.0.1/-tag/latest
npm http 201 https://registry.npmjs.org/lowercase_demo/0.0.1/-tag/latest
+ lowercase_demo@0.0.1
6. 通过npm安装
通过npm下载安装
~ D:\workspace\javascript>mkdir nodejs-package-project2 && cd nodejs-package-project2
~ D:\workspace\javascript\nodejs-package-project2>npm install lowercase_demo
npm http GET https://registry.npmjs.org/lowercase_demo
npm http 200 https://registry.npmjs.org/lowercase_demo
lowercase_demo@0.0.1 node_modules\lowercase_demo
全局安装lowercase_demo
~ D:\workspace\javascript\nodejs-package-project2>npm install lowercase_demo -g
npm http GET https://registry.npmjs.org/lowercase_demo
npm http 304 https://registry.npmjs.org/lowercase_demo
D:\toolkit\nodejs\lowercase -> D:\toolkit\nodejs\node_modules\lowercase_demo\bin\lowercase
npm ERR! peerinvalid The package generator-karma does not satisfy its siblings' peerDependenci
npm ERR! peerinvalid Peer generator-angular@0.4.0 wants generator-karma@~0.5.0
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "D:\\toolkit\\nodejs\\\\node.exe" "D:\\toolkit\\nodejs\\node_modules\\npm\\bi
lowercase_demo" "-g"
npm ERR! cwd D:\workspace\javascript\nodejs-package-project2
npm ERR! node -v v0.10.5
npm ERR! npm -v 1.2.19
npm ERR! code EPEERINVALID
npm ERR! Additional logging details can be found in:
D:\workspace\javascript\nodejs-package-project2\npm-debug.log
npm ERR! not ok code 0
错误不是lowercase_demo的,没有关系。
执行全局命令:lowercase
~ D:\workspace\javascript\nodejs-package-project2>lowercase test\data\sample.txt
D:\toolkit\nodejs\node_modules\lowercase_demo\bin/../test\data\sample.txt
注: 关于命令lowercase,因为代码中定义的是相对目录,所以只能访问D:\toolkit\nodejs\node_modules\lowercase_demo\目录的数据文件。
这样,我们自定义的lowercase_demo库,开发完成,发布到npm官方依赖管理,并且安装成功!整体流程走了一遍发现还是挺简单的。
你也来动手试试吧!
转载请注明出处:
This entry was posted in
Pingback: ()
Pingback: ()
Designed by

我要回帖

更多关于 nodejs fs模块 的文章

 

随机推荐