node 問題

安裝:使用.msi直接安裝就好,環境變量已經設置好了javascript

一、問題:驗證node是否正確安裝php

辦法:直接計算1+1;建立服務器。html

在項目文件夾的路徑下,輸入node命令,會看到一個提示符,這裏只能輸入直接輸出的語句,不能運行js文件。前端

二、npm模塊java

包管理器;通常都已經安裝好了;可輸入npm來驗證;使用時:require;模塊文檔:npm docs XXX,npm bugs XXX,npm edit XXX。node

高階:package.json.建立依賴關係,使用npm install一鍵安裝全部的包,便於共享。 mysql

問題:安裝時候會修改默認的路徑,因此須要在此路徑下(C:\Users\Administrator\AppData\Roaming)新建一個npm文件,這樣就能夠正常運行npm命令了。jquery

三、輸出和輸出是不可預測的。想爬取頁面的內容,但何時會返回什麼內容是不能肯定的。這裏先不考慮順序,返回內容的順序並不重要。git

回調首先解決不可預測性的方法,其次也是處理併發的方法。github

異步並非node或js特有的,而是一種編程風格。

node幾乎從不使用同步,而是異步的調用回調

四、json和js對象字面量

{ "prop": "val" } 這樣的聲明有多是JavaScript對象字面量也有多是JSON字符串,取決於什麼上下文使用它,若是是用在string上下文(用單引號或雙引號引住,或者從text文件讀取)的話,那它就是JSON字符串,若是是用在對象字面量上下文中,那它就是對象字面量。

// 這是JSON字符串
var foo = '{ "prop": "val" }';

// 這是對象字面量
var bar = { "prop": "val" };

並且要注意,JSON有很是嚴格的語法,在string上下文裏{ "prop": "val" } 是個合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }確實不合法的。全部屬性名稱和它的值都必須用雙引號引住,不能使用單引號。另外,即使你用了轉義之後的單引號也是不合法的。--轉自tom大叔的博客

用引號引住,且內部用雙引號的纔是json,其餘的一切都不是合法的json。

五、http

在同一臺電腦上,創建web服務器,並創建客戶端去訪問,怎麼實現不了呢?  應該能夠

使用writeHead方法能夠返回響應頭,能夠了重定向。URL模塊用來作路由。

還能夠建立http客戶端。

六、express的安裝問題

安裝:npm install -g express

須要安裝命令工具:npm install -g express-generator;

生成模板引擎爲ejs的express項目:express -e  microblog

ejs:app.engine('html', require('ejs').renderFile);    ejs模板擴展到.html文件,有問題仍是要看官網!

express4的啓動方式:node bin/www; supervisor bin/www

npm uninstall -g express  能夠卸載某一模塊;express -V  查看版本,要大寫;安裝依賴的包:npm install;啓動:npm start.

主要介紹了Jade的內容

Jade:基於縮進:縮進不正確,可能會致使錯誤。做用:能夠給HTML動態輸入數據

一行在上一行下面縮進,則認爲它是上一行的子行;管道描述符:組織大的文本主體;

使用Jade輸出數據:變量,循環,條件,內聯,包含,Minxin

- 隨後的代碼應當被執行。 循環,if,else前不須要減號;若是user爲變量,則p= user,若user爲常量,則p user。

 內聯:

script 

  alert('add success');

包含:

body

  include includes/header.jade

Mixin:重複某些代碼塊

安裝:npm -g install supervisor

supervisor的啓動方式supervisor bin/www,

jade擴展到html文件:include content.html

七、mongodb

解壓zip文件就ok了,新建data文件,打開時須要寫--dbpath。

mongoose提示找不到mongodb模塊,是由於npm install沒運行好,智能npm cache clean以後,再重裝

express in dependencies add:''mongodb":"*"   不能加逗號

error connecting to database:failed to connect to [127.0.0.1:27017]:出現這個錯誤,是由於mongodb沒有打開。是由於d/mongodb,應該是d:/mongodb

 

EXPRESS MONGODB 搭建多人博客:

碰到的問題:

設置數據庫路徑並啓動數據庫:mongod -dbpath "d:/mongodb/blog":不能用‘’。

是res.redirect(''/)而不是req.redirect('/')

form必定要加method='post';

mongod.exe的閃退:在mongodb的同級目錄下,新建data/db,就ok了。

切換數據庫:use blog

取出了數據庫的全部信息:

User.get=function get(username,callback){
    mongodb.open(function(err,db){
        if(err){
            return callback(err);
        }

        db.collection('users',function(err,collection){
            if(err){
                mongodb.close();
                return callback(err);
            }
            
            collection.find(function(err,doc){
                doc.each(function(err,doc){
                    if(doc){
                        console.log('name:'+doc.name+';password:'+doc.password);
                    }
                })
            });            
        });
    });
};

express jade:index.jade extends layout layout.jade

updata form use PUT method

req.flash 在3.x後都不支持了

express的上傳:

一、

app.use(express.bodyParser({uploadDir:'./uploads'}));   //指定上傳地址

<form method="post" enctype="multipart/form-data" action="/file-upload">
  <input type="file" name="thumbnail">
  <input type="submit">
</form>

app.post('/file-upload', function(req, res, next) {
  console.log(req.body);
  console.log(req.files);
});

  

要先在根目錄下新建uploads文件。重命名:

app.post('/file-upload',function(req,res,next){
			var tmp_path=req.files.thumbnail.path;
			var target_path='./public/images/'+req.files.thumbnail.name;

			fs.rename(tmp_path,target_path,function(err){
				if(err) throw err;				
			});

			res.redirect('/');
		})

express中集成了formidable,因此一塊兒用時會有問題。

安裝模塊時,提示error ENOENT,Stat:只須要在提示路徑下新建npm文件就能夠。

mkdir nodejs-connect && cd nodejs-connect:能夠連起來寫

 

沒有裝npm install hiredis redis,但也能訪問redis。

直接啓動redis客戶端:redis_cli

每一個Redis元素有一個類型,若是這個Redis元素的類型是hash,那麼就能夠用hkeys找到他有哪些key

data-query-params:
function queryParams(params){
params.searchText = 'test query';
return params;
}
在server用req.query.searchText獲取

data-response-handler:
function responseHandler(res) {
console.log('keys:'+res.col);
return res.child;
}

bootstrap table:load 是直接加載數據,refresh 通常用於從服務器中獲取數據;刷新的話,會先消失,再重現,卡的動做很明顯。silent: true,

bootstrap table:在它的基礎上,用其餘插件實現reorder columns,不能成功的緣由:jquery.sorttable.js:類庫的版本要求低;因爲bt會在th里加元素來調整字的位置。而jquery.sorttable.js要求th裏面的div要和th同寬高。因此一直對不上。 

 

卸載:直接刪掉就好,nodejs

 

20151003

最近在作一個項目,本身主要作前端的,後端使用php,別人作的。本身把後端node實現了一遍。

學到的東西:mysql,async等模塊,MVC的實踐;不足的地方:express-session必定要跟redis等數據庫聯繫起來嗎?MVC不少代碼不知道怎麼放更合理。

接下來須要看看別人的項目:

一、hi-cms:https://github.com/highsea/hi-cms  用的技術都同樣,看一下別人怎麼寫的。

二、開源CMS:https://git.oschina.net/doramart/DoraCMS

三、網絡平臺:http://git.oschina.net/liweisadleader/CodeCraft

四、cms:https://github.com/keystonejs/keystone

hexo是神馬東西?

 

守護nodejs進程:在出錯以後,如何處理

一、子進程的方法

var spawn = require('child_process').spawn;

function start(){
  nw = spawn('supervisor bin/www');
  
  nw.on('close',function(code, signal){
    nw.kill(signal);
    nw = start();
  });
  nw.on('error',function(code, signal){
    nw.kill(signal);
    nw = start();
  });
  return nw;
};

start();

  

配置文件 使用方式

config.js

module.exports={'a':1,'b':1} 

​調用:

var config=require('./config')

post 傳遞對象數組
前端
var a = [
      {
        "name": 'name1',
        "age": 'age1'
      },
      {
        "name": 'name2',
        "age": 'age2'
      }
    ];
    $.post('/test', {
      post: JSON.stringify(a)
    }, function(data){
      debugger
    })

後端

router.post('/test', function(req, res, next) {
  console.log('/test');

  var a = JSON.parse(req.body.post);

  console.log(util.inspect({a: a}));

  res.send({
    path: '/test'
  })
});

若是不這樣作的話,很容易出現 'post[0][name]': 'name1',這種狀況 

 

post傳遞json

json

{
      "Email": "sfpeng@163.com",
      "Password": "123456"
    }

以string傳遞,同域和跨域都同樣

$.post('/test', {
      post: JSON.stringify(a)
    }, function(data){
      debugger
    })

以json傳遞

同域

$.ajaxSetup({
      contentType: "application/json; charset=utf-8"
    });

    $.post('/test', JSON.stringify(a), function(data){
      debugger
    }); 

跨域 如今有點問題,server須要驗證header method:https://segmentfault.com/a/1190000000709909 不是那麼簡單的請求

$.ajaxSetup({
      contentType: "application/json; charset=utf-8"
    });

    $.post('/test', JSON.stringify(a), function(data){
      debugger
    }); 

server

app.use(function(req, res, next){
  res.header('Access-Control-Allow-Origin', "*");
  res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

有一次:訪問另外一個網站的json數據,經過這種方式仍是無法跨域,只能提供接口以後,才成功訪問

  

gulp不是內部或外部命令

一種緣由是,環境變量沒有添加,須要添加 c:/users/administrator/appdata/roaming/npm

另外一種緣由是,gulp沒有正確安裝。把gulp全局和局部安裝一下。  

 

n 模塊 管理nodejs版本:http://www.jianshu.com/p/cfdfd3d04215

升級到最新版 n stable

升級到指定版 n v0.12.2

mac 上這個模塊是正常的;pc 上使用有問題。 

 

退出,兩種狀況:

一、ctrl+z,須要kill進程

二、ctrl+c,不須要kill進程 

 

錯誤處理

if(err){
    res.json({
      msg: 'error'
    });
    return;
  }

  

中間件存在的問題:

每用過一箇中間件,都是把用法記錄下來。可是下次用時,可能會是不一樣的版本,用法也有不一樣  

  

module.exports exports的區別

https://cnodejs.org/topic/52308842101e574521c16e06

 

模塊名跟項目名 不能相同

 

測試

packages.json  

   "chai": "^3.5.0",
    "istanbul": "^0.4.5",
    "mocha": "^3.2.0",
    "mocha-phantomjs": "^4.1.0",
    "should": "^11.1.2",
    "supertest": "^2.0.1"

/test

  mocha init f2e

Makefile

命令以tab開頭 

在跟目錄下執行make test 

test:
	./node_modules/.bin/mocha

cov test-cov:
	./node_modules/.bin/istanbul cover _mocha

.PHONY: test cov test-cov

 

app.locals 設置模板全局常量

res.locals 添加模板必需的三個變量

 

中間件

  寫一個公用的函數,能夠常常調用 

 

nvm  

  切換nodejs版本

  已安裝

  nvm ls

  nvm use 0.12

nrm 

  管理npm源的工具

  nrm ls

  nrm use cnpm

 

require

  同步

  判斷是不是程序的入口文件 require.main === module

  循環引用 之後注意下 

 

npm config set save-exact true,這樣每次 npm i xxx --save 的時候會鎖定依賴的版本號,至關於加了 --save-exact 參數。 

使用npm shrinkwrap鎖死依賴版本號

經過運行 npm shrinkwrap,會在當前目錄下產生一個 npm-shrinkwrap.json,裏面包含了經過 node_modules 計算出的模塊的依賴樹及版本。

 

--save 加入依賴

--save-dev 加入開發依賴

相關文章
相關標籤/搜索