nodejs下載文件到本地
1. 問題又來了 用nodejs webkit 做客戶端 怎麼訪問本地文件並且操作
1 安裝nodejs,在來http://nodejs.org/download/上下載32位的.msi文件,直接安源裝,如下所示(版本號為0.10.26): 將安裝後的目錄添加的環境變數中,如:D:\Program Files\nodejs (主要目的是使該目錄下的node.exe可以在命令行中運行)。 2 安裝p...
2. nodejs怎麼在指定文件夾下運行
一、挖坑 & 掉坑:
緣起一段這樣的代碼:
fs.readFile('./docs/use.md', function (err, buffer) {
if (err) {
return console.log('error: ', err);
}
console.log('OK');
});
本地運行時一切 OK,線上部署時卻死活找不到 ./docs/use.md 這個文件,後來才發現是因為線上啟動應用時不是從當前目錄啟動了,不過為什麼啟動腳本的位置也會影響這個路徑呢,且往下看。
二、填坑:
Node 中的文件路徑大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三個都是絕對路徑,為了便於比較,./ 和 ../ 我們通過 path.resolve(『./』)來轉換為絕對路徑。
先看一個簡單的栗子:
假如我們有這樣的文件結構:
app/
-lib/
-common.js
-model
-task.js
-test.js
在 task.js 里編寫如下的代碼:
var path = require('path');console.log(__dirname);console.log(__filename);console.log(process.cwd());console.log(path.resolve('./'));
在 model 目錄下運行 node task.js 得到的輸出是:
/Users/guo/Sites/learn/app/model.js/Users/guo/Sites/learn/app/model.js/task.js/Users/guo/Sites/learn/app/model.js/Users/guo/Sites/learn/app/model.js
然後在 app 目錄下運行 node model/task.js,得到的輸出是:
/Users/guo/Sites/learn/app/model.js/Users/guo/Sites/learn/app/model.js/task.js/Users/guo/Sites/learn/app
/Users/guo/Sites/learn/app
那麼,不好意思不是問題來了~T_T,我們可以得出一些膚淺的結論了:
__dirname: 總是返回被執行的 js 所在文件夾的絕對路徑
__filename: 總是返回被執行的 js 的絕對路徑
process.cwd(): 總是返回運行 node 命令時所在的文件夾的絕對路徑
./: 跟 process.cwd() 一樣、一樣、一樣的嗎?
我明明記得在 require(『../lib/common』) 里一直都是各種相對路徑寫,也沒見報什麼錯啊,我們還在再來個栗子吧,還是上面的結構,』model/task.js』 里的代碼改成:
var fs = require('fs');var common = require('../lib/common');
fs.readFile('../lib/common.js', function (err, data) { if (err) return console.log(err);
console.log(data);
});
在 model 目錄下運行 node task.js,一切 Ok,沒有報錯。然後在 app 目錄下運行 node model/task.js,然後很果斷滴報錯了:
那麼這下問題真的都是來了,按照上面的理論,在 app 下運行時,../lib/common.js 會被轉成 /Users/guo/Sites/learn/lib/common.js,這個路徑顯然是不存在的,但是從運行結果可以看出 require(『../lib/common』) 是 OK 的,只是 readFile 時報錯了。
那麼關於 ./ 正確的結論是:
在 require() 中使用是跟 __dirname 的效果相同,不會因為啟動腳本的目錄不一樣而改變,在其他情況下跟 process.cwd() 效果相同,是相對於啟動腳本所在目錄的路徑。
三、總結:
只有在 require() 時才使用相對路徑(./, ../) 的寫法,其他地方一律使用絕對路徑,如下:
// 當前目錄下
path.dirname(__filename) + 『/test.js』;
// 相鄰目錄下
path.resolve(__dirname, 『../lib/common.js』);
四、參考鏈接:
What is the difference between __dirname and ./ in node.js
nodejs API
以上:smile:。
3. nodejs怎麼訪問到根目錄下的文件
可以嘗試我開發的 前端開發 構建工具slow-cli 安裝 npm install slow-cli -g使用 在本地的html文件的目錄下運行內一次容(以後就不用運行了) slow init然後運行 slow start就可以了。 打開瀏覽器 localhost:3000/xx.html就可以 訪問本地的html文件
4. nodejs怎麼運行我的源程序文件
第一步當復然是安裝nodeJS環境了,現在制windows安裝nodeJS比較快了,直接下載即可
這里根據需要下載,下載完成後直接下一步下一步即可,完了我們就具有nodeJS環境了
第二步,為了方便我們後面操作,我們直接在D盤見了一個文件夾blog
然後打開windows命令行工具,進入d盤,輸入:
復制代碼代碼如下:
express -e blog
然後裡面可能有依賴包,我們需要進入blog目錄安裝(安裝的配置由package.json提供):
復制代碼代碼如下:
npm install
這個樣子,我們依賴包就下載下來了,其中依賴包與java的包文件,.net的bll文件應該是一個概念
這個時候,我們的程序已經可以運行了:
復制代碼代碼如下:
node app
復制代碼代碼如下:
D:\blog>node appExpress server listening on port 3000
這個時候打開瀏覽器就有反應了
5. nodejs程序怎麼獲得下載文件的時間並將其寫進資料庫本人新手。。
首先是數據從前端的傳遞方式,這個本不該是這里的內容,不過說說也無所謂。前端傳專遞參數有很多方法屬,比如表單傳遞、AJAX傳遞,但歸根結底就是兩種傳遞方法,post傳遞或者get傳遞。
兩者的區別就是get傳遞是通過url後面附加參數的傳遞方法,而post傳遞是通過表單的數據體附加提交。其他的區別與node無關,這里就不贅述了。
6. node.js中npm安裝的模塊在哪個目錄下
npm install在哪個目錄抄下執行就安裝在這個目錄的node_moles文件夾下。
local本地安裝:
npm install xxx 安裝到命令行所在目錄的node_mole目錄。
global全局安裝:
npm install xxx -g 安裝到 AppDataRoaming pm ode_moles目錄。
(6)nodejs下載文件到本地擴展閱讀
Node採用一系列「非阻塞」庫來支持事件循環的方式。本質上就是為文件系統、資料庫之類的資源提供介面。向文件系統發送一個請求時,無需等待硬碟(定址並檢索文件),硬碟准備好的時候非阻塞介面會通知Node。該模型以可擴展的方式簡化了對慢資源的訪問, 直觀,易懂。
Node使用Mole模塊去劃分不同的功能,以簡化應用的開發。Moles模塊有點像C++語言中的類庫。每一個Node的類庫都包含了十分豐富的各類函數,比如http模塊就包含了和http功能相關的很多函數,可以幫助開發者很容易地對比如http,tcp/udp等進行操作,還可以很容易的創建http和tcp/udp的伺服器。
7. nodejs npm install全局安裝和本地安裝的區別
npm的包安裝分為本地安裝(local)、全局安裝(global)兩種,從敲的命令行來看,差別只是有沒有-g而已,比如:
代碼如下:復制代碼
npm install grunt # 本地安裝
npm install -g grunt-cli # 全局安裝
下面分別解釋。
1. npm install xxx -g 時, 模塊將被下載安裝到【全局目錄】中。
【全局目錄】通過 npm config set prefix "目錄路徑" 來設置。
通過 npm config get prefix 來獲取當前設置的目錄。
2. npm install xxx ,則是將模塊下載到當前命令行所在目錄。
例如:
代碼如下:復制代碼
c:123>npm install xxx
將會安裝到
代碼如下:復制代碼
c:123
ode_molesxxx
這種方式顯然是不好的,所以一般都會使用全局安裝方式統一安裝的一個目錄中去,這樣既方便管理、結構清晰還可以重復利用。
(7)nodejs下載文件到本地擴展閱讀:
1、npm install moleNames:安裝Node模塊
安裝完畢後會產生一個node_moles目錄,其目錄下就是安裝的各個node模塊。
node的安裝分為全局模式和本地模式。
一般情況下會以本地模式運行,包會被安裝到和你的應用程序代碼的本地node_moles目錄下。
在全局模式下,Node包會被安裝到Node的安裝目錄下的node_moles下。
全局安裝命令為$npm install -g moleName。
獲知使用$npm set global=true來設定安裝模式,$npm get global可以查看當前使用的安裝模式。
示例:
npm install express
默認會安裝express的最新版本,也可以通過在後面加版本號的方式安裝指定版本,如npm install [email protected]
npm install <name> -g
將包安裝到全局環境中
但是代碼中,直接通過require()的方式是沒有辦法調用全局安裝的包的。全局的安裝是供命令行使用的,就好像全局安裝了vmarket後,就可以在命令行中直接運行vm命令
npm install <name> --save
安裝的同時,將信息寫入package.json中項目路徑中如果有package.json文件時,直接使用npm install方法就可以根據dependencies配置安裝所有的依賴包,這樣代碼提交到github時,就不用提交node_moles這個文件夾了。
8. nodejs 怎麼下載遠程文件並該名稱
nodejs對文件的讀寫還是相當靈活的,可以根據不同的場景來選擇不同的方法。
一.直接操作文件
最簡單的兩個fs.readFile和fs.writeFile
舉例:這個程序的功能是將一個比較大json格式的文件轉換成你想自己要格式的文件。
var fs = require('fs');
fs.readFile('./json.json',function(err,data){
if(err) throw err;
var jsonObj = JSON.parse(data);
var space = ' ';
var newLine = '\n';
var chunks = [];
var length = 0;
for(var i=0,size=jsonObj.length;i<size;i++){
var one = jsonObj[i];
//what value you want
var value1 = one['value1'];
var value2 = one['value2'];
....
var value = value1 +space+value2+space+.....+newLine;
var buffer = new Buffer(value);
chunks.push(buffer);
length += buffer.length;
}
var resultBuffer = new Buffer(length);
for(var i=0,size=chunks.length,pos=0;i<size;i++){
chunks[i].(resultBuffer,pos);
pos += chunks[i].length;
}
fs.writeFile('./resut.text',resultBuffer,function(err){
if(err) throw err;
console.log('has finished');
});
});
它的原理是將文件數據一次性全部讀入內存,優點就是接下來都是在內存的操作,速度會很快。但缺點也很明顯,就是當文件非常大時,會造成內存溢出。
二. 使用文件流
2.1 讀取文件,api相見:fs.createReadSream 和 fs.createWriterStream
以下代碼實現的功能就是通過文件流來實現圖片的復制:
var fs = require('fs');
var rOption = {
flags : 'r',
encoding : null,
mode : 0666
}
var wOption = {
flags: 'a',
encoding: null,
mode: 0666
}
var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);
fileReadStream.on('data',function(data){
fileWriteStream.write(data);
});
fileReadStream.on('end',function(){
console.log('readStream end');
fileWriteStream.end();
});
9. 無法連接到本地伺服器中用Nodejs問題,怎麼解決
搭建nodejs伺服器步驟:
1.安裝nodejs服務(從官網下載安裝),node相當於apache伺服器
2.在自己定義的目錄下新建伺服器文件如 server.js
例如,我在E:\PhpProject\html5\websocket下創建了server.js文件
var http = require('http');//引入http模塊//開啟服務,監聽8888埠//埠號最好為6000以上var server = http.createServer(function(req,res){
/*
req用來接受客戶端數據
res用來向客戶端發送伺服器數據
*/
console.log('有客戶端連接');//創建連接成功顯示在後台
//一參是http請求狀態,200連接成功
//連接成功後向客戶端寫入頭信息
res.writeHeader(200,{ 'content-type' : 'text/html;charset="utf-8"'
});
res.write('這是正文部分');//顯示給客戶端
res.end();
}).listen(8888);
console.log('伺服器開啟成功');
3.在cmd控制台中cd切換進server.js所在的目錄,然後執行node server.js命令
當控制台顯示」伺服器開啟成功」則說明node伺服器已經建立
4.在瀏覽器中訪問伺服器
在瀏覽器中輸入
localhost:8888 , 瀏覽器顯示「這是正文部分」。
查看cmd控制台,顯示 「有客戶端連接」
可在多個瀏覽器窗口中進行以上操作,每個瀏覽器窗口均會對應一次「有客戶端連接」
以上步驟完成,node服務搭建完畢。下面是如何通過搭建的node服務訪問本地站點的 text/html文本文件
訪問本地站點文件
1.在自定義的目錄下創建node服務文件server2.js
var http = require('http');var fs = require('fs');//引入文件讀取模塊var documentRoot = 'E:/PhpProject/html5/websocket/www';//需要訪問的文件的存放目錄var server= http.createServer(function(req,res){
var url = req.url;
//客戶端輸入的url,例如如果輸入localhost:8888/index.html
//那麼這里的url == /index.html
var file = documentRoot + url;
console.log(url); //E:/PhpProject/html5/websocket/www/index.html
fs.readFile( file , function(err,data){
/*
一參為文件路徑
二參為回調函數
回調函數的一參為讀取錯誤返回的信息,返回空就沒有錯誤
二參為讀取成功返回的文本內容
*/
if(err){
res.writeHeader(404,{ 'content-type' : 'text/html;charset="utf-8"'
});
res.write('<h1>404錯誤</h1><p>你要找的頁面不存在</p>');
res.end();
}else{
res.writeHeader(200,{ 'content-type' : 'text/html;charset="utf-8"'
});
res.write(data);//將index.html顯示在客戶端
res.end();
}
});
}).listen(8888);
console.log('伺服器開啟成功');
2.創建index.html文件
如果要訪問index.html文件,當然你得先有這個文件,不然伺服器讀取失敗,返回40412
3.在cmd控制台cd切換到 server2.js的目錄下執行node server2.js命令
開啟伺服器
4.在瀏覽器輸入localhost:8888/index.html訪問 該文件