關於nodejs讀取中文文件真是折騰了不少時間,網上各種方案,最後沒有一個適用我,好在解內決了。
下面的三個知識容點都是從項目中抽出的,要單獨運行腳本的話需要用全局模式來安裝模塊,比如安裝中文轉換模塊(後續其它的也需要這么做):
復制代碼 代碼如下:
npm install -g iconv-lite
npm install -g nodemailer
npm install -g node-schele
B. 如何自己檢查NodeJS的代碼是否存在內存泄漏
首先,我們檢查了代碼,發現所有的代碼都是用new來分配內存,用delete來釋放內存。那麼,我們能夠用一個全程替換,來替換掉所有的new和delete操作符嗎?不能。因為代碼的規模太大了,那樣做除了浪費時間沒有別的任何好處。好在我們的源代碼是用C++來寫成的,所以,這意味著沒有必要替換掉所有的new和delete,而只用重載這兩個操作符。對了,值用重載這兩個操作符,我們就能在分配和釋放內存之前做點什麼。這是一個絕對的好消息。我們也知道該如何去做。因為,MFC也是這么做的。我們需要做的是:跟蹤所有的內存分配和交互引用以及內存釋放。我們的源代碼使用Visual C++寫成,當然這種解決方法也可以很輕松的使用在別的C++代碼裡面。要做的第一件事情是重載new和delete操作符,它們將會在所有的代碼中被使用到。我們在stdafx.h中,加入:
#ifdef _DEBUG
inline void * __cdecl operator new(unsigned int size,
const char *file, int line)
{
};
inline void __cdecl operator delete(void *p)
{
};
#endif
C. 如何用nodejs執行js代碼
nodejs就是js啊,兩個是一種語言,只是運行的環境不同而已,nodejs是在伺服器端運行,專而js是在客戶端瀏覽器上運行。不太屬懂你說的什麼意思?
你的意思是不是希望讓nodejs像瀏覽器一樣模擬運行一個窗口,如果是這樣你可以考慮用nodejs的phantom模塊,我們一般用這個模塊來模擬瀏覽器界面截圖用。
如果你是想讓nodejs載入另一個js文件,你可以用nodejs本身提供的require模塊,載入文件。當你也可以自己寫一個fs讀取js文件,然後eval文件里的語句。
D. 我想給一些菜鳥看看nodejs的代碼應該怎麼寫
var cookie = require('cookie');
mole.exports = function (req, res, conf, views, db) {
..var body = req.body,
....id = req.ids[0],
....usid = cookie.parse(req.headers.cookie).usid;
..function redirect () {
....res.writeHead(302, { 'location' : '/accounts' });
....res.end();
..}
..function joinpage () {
....res.writeHead(200, { 'Content-Type' : 'text/html;charset=utf-8' });
....res.write(views.ACCOUNTS_JOIN);
....res.write(views.unit({
......id : 'accounts_menu',
......name : 'accounts_menu',
........options : {
..........class_id : id
........}
....}));
....res.write(views.unit({
......id : 'accounts_join',
......name : 'accounts_join',
......options : {
........action : '/accounts/' + id + '/join',
........num : '0'
......}
....}));
....res.end(views.FOOTER);
..}
..db.session(usid, function (state) {
....// 已經建立會話
....if (state) {
......joinpage();
......return;
....}
....// 沒有建立會話
....redirect();
..});
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////
這段代碼,是nodejs其中一個路由處理函數.
使用到了views視圖模型,db資料庫模型,以及conf全局配置文件.
並且使用了cookie模塊來解析會話ID.
views視圖模型 : 生產HTML界面 [可以隨時切換到PC或者移動HTML,介面一致]
db數據模型 : 生產資料庫數據
conf全局配置文件 :你所需要的全局環境內容
代碼的功能:
檢測請求
....是否建立會話?
........是,跳轉到"/"路由
........否,為用戶顯示登錄界面
其中views負責生產視圖界面, 在views模型中緩存了大量的常量,類似ACCOUNTS_JOIN,是頁面布局。
對於其中的動態內容,採用facebook的bigpipe技術。
views.unit(/*id, name, css, js, content*/)輸出script片段,分流到瀏覽器渲染。
整個伺服器端在啟動時渲染完畢所有的頁面布局體,並緩存到views模型中,動態內容由bigpipe發送到前端渲染。
E. 如何用nodejs實現mysql多表查詢並顯示結果及刪除
你要在entity中創建一個多表查詢屬性的實體類。這樣才能承裝查詢出來的數據,之後將數據傳入作用域中或者是以json字元串返回前台,前台再進行解析
F. 如何通過nodeJs爬蟲獲取數據簡單實現代碼
var http=require('http');
var cheerio=require('cheerio');//頁面獲取到的數據模塊
var url='http://www.jcpeixun.com/lesson/1512/';
function filterData(html){
/*所要獲取到的目標數組
var courseData=[{
chapterTitle:"",
videosData:{
videoTitle:title,
videoId:id,
videoPrice:price
}
}] */
var $=cheerio.load(html);
var courseData=[];
var chapters=$(".list-collapse");
chapters.each(function(item){
var chapterTitle=$(this).find(".collapse-head").find("label").text();
var videos=$(this).find(".listview5").children("li");
var chaptersData={
chaptersTitle:chapterTitle,
videosData:[]
}
videos.each(function(item){
var videoTitle=$(this).find(".ml10").attr('data-lesson-name');
var videoId=$(this).find(".ml10").attr('data-lesson-id');
var vadeoPrice=$(this).find(".colblue").text();
chaptersData.videosData.push({
title:videoTitle,
id:videoId,
price:vadeoPrice
})
})
courseData.push(chaptersData)
})
return courseData
}
function printCourseInfo(courseData){
courseData.forEach(function(item){
console.log(item.chaptersTitle+'\n');
item.videosData.forEach(function(item){
console.log(item.title+'【'+item.id+'】'+item.price+'\n')
})
})
}
http.get(url,function(res){
html="";
res.on("data",function(data){
html+=data
})
res.on('end',function(){
var courseData=filterData(html);
printCourseInfo(courseData)
})
})
G. nodejs運行js代碼
在cmd或者bash終端運行 node 文件路徑 即可
例 node ./bin/app.js
H. 怎麼自己檢查NodeJS的代碼是否存在內存泄漏
首先,我們來看一個簡單的內存泄漏
var http = require('http');
var server = http.createServer(function (req, res) {
for (var i=0; i<1000; i++) {
server.on('request', function leakyfunc() {});
}
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
server.setMaxListeners(0);
console.log('Server running at http://127.0.0.1:1337/. Process PID: ', process.pid);
每一個請求我們增加了1000個導致泄漏的監聽器。如果我們在一個shell控制台中執行以下命令:
while true; do curl "http://127.0.0.1:1337/"; done
然後在另外一個shell控制台中查看我們的進程
top -pid
我們會看到node進程產生異常高的內存佔用,我們的node進程看起來失控了。那麼,當我們的node進程出現這種情況的時候,通常我們該怎樣診斷出問題的根源?
內存泄露的檢測
npm模塊 memwatch 是一個非常好的內存泄漏檢查工具,讓我們先將這個模塊安裝到我們的app中去,執行以下命令:
npm install --save memwatch
然後,在我們的代碼中,添加:
var memwatch = require('memwatch');
//memwatch.setup(); 原文有這行代碼,最新版本的memwatch已去掉這個方法(譯者注)
然後監聽 leak 事件
memwatch.on('leak', function(info) {
console.error('Memory leak detected: ', info);
});
這樣當我們執行我們的測試代碼,我們會看到下面的信息:
{
start: Fri Jan 02 2015 10:38:49 GMT+0000 (GMT),
end: Fri Jan 02 2015 10:38:50 GMT+0000 (GMT),
growth: 7620560,
reason: 'heap growth over 5 consecutive GCs (1s) - -2147483648 bytes/hr'
}
參考文獻https://w3ctech.com/topic/842#rd?sukey=0e1af5eeb690c5521ad1e164fb