nodejs 4 npm

npm和配置

Node Packaged Modules 简称NPM,是nodejs的包理器。


Express框架

express框架继承了web的http服务器的创建,静态文件管理,服务器的url请求处理,GET和POST请求分发,Session处理等功能。

  1. 全局安装express $ npm install -g express-generator (express-generator可以安装express框架的工程模板生成一个项目。)
  2. 进入任何目录执行$ express app

    image

    如图所示: 下载依赖: $ cd app && npm install

  3. 进入app文件夹,运行app.js启动项目 npm start

  4. 浏览器输入http://127.0.0.1:3000

    image


jade模板

jade是一款高性能、简洁易懂的模版引擎,jade是html的javascript实现。

安装jade:目录下执行$ npm install jade --save

  • app应用下的jade模板文件index.jade
extends layout

block content
  h1= title
  p Welcome to #{title}
  1. extends layout 在index.jade页面加载layout.jade
  2. h1和p1分别表示html对应的<h1></h1><p></p>,其后的值是标签内的DOM元素
  3. #{title}是服务器Node.js传递的参数
  4. render API: res.render( ‘模板名’ , { 参数对象 });
//app/routers/index.js
  /* GET home page. */
router.get('/', function(req, res, next) {
 res.render('index', { title:'Express'});
 );
  • jade中的if、for案例

    【1】 if条件判断语法

    if ${name} == 'admin'
        p this is an admin
      else 
        p this  is not an admin

    【2】 for循环语法

    1. each:

      var items = ["one", "two", "thress"];
      each item in items
        li = item
    2. for:

      for user in users
        for role in users.roles
          li = role

forever模块

  • 作用: 监控文件更改、自动重启等。

  • 使用方法:

    1. 命令行中使用
    2. 在node.js编码中require forever模块种使用
  • 全局安装 $ npm install forever -g

  • 使用:
# 启动
forever start ./bin/www  #最简单的启动方式
forever start -l forever.log ./bin/www  #指定forever日志输出文件,默认路径~/.forever
forever start -l forever.log -a ./bin/www  #需要注意,如果第一次启动带日志输出文件,以后启动都需要加上 -a 参数,forever默认不覆盖原文件
forever start -o out.log -e err.log ./bin/www  #指定node.js应用的控制台输出文件和错误信息输出文件
forever start -w ./bin/www  #监听当前目录下文件改动,如有改动,立刻重启应用,不推荐的做法!如有日志文件,日志文件是频繁更改的

# 重启
forever restart ./bin/www  #重启单个应用
forever restart [pid]  #根据pid重启单个应用
forever restartall  #重启所有应用

# 停止(和重启很类似)
forever stop ./bin/www  #停止单个应用
forever stop [pid]  #根据pid停止单个应用
forever stopall  #停止所有应用

# 查看forever守护的应用列表
forever list

socket.io模块

  1. 作用: 将WebSocket协议应用到所有的浏览器。
  2. 应用实例: 在线联网游戏、实时聊天、实施股票查看、二维码扫描登陆等。
  3. 安装 $ npm install socket.io
  4. 实例项目:

    登录统计在线人数,服务端实时推送给客户端在线人数

    因为代码挺长的 这里就不复制粘贴了,详细代码请看代码仓库的代码。
    代码仓库(喜欢请star(๑•ᴗ•๑))

    注意:

    报错:http://127.0.0.1:8888/socket.io/1/?t=1404410309733 400 (Bad Request)
    解决办法:应该是socket.io.js版本太低,客户端改成<script src="https://cdn.socket.io/socket.io-1.0.6.js"></script>


request模块

封装http请求方式: GET、POST、HEAD、DEL等

1. GET案例

//app_get.js
var http = require('http');
var server = http.createServer(function (req,res){
  res.writeHead(200,{'Content-Type':'text/plain'});
  res.end("hello world\n" + req.method);
}).listen(3000,"127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');


//request_get.js
var request = require("request");
request.get("http://127.0.0.1:3000", function(err, response, result){
    console.log("get", result);
})

//执行node app_get.js
//执行node request_get.js
//输出: get hello wolrd\n GET

2. POST案例

//app_post.js
var http      = require("http");
    querystring = require("querystring");
var server = http.createServer(function (req,res) {

    var postData = "";
    /*接受客户端post的数据*/
    req.addListener("data", function(postDataChunk) {
        postData += postDataChunk;
    })
    /*数据接收完成后执行匿名回调函数*/
    req.addListener("end", function() {
        var postStr = JSON.stringfy(querystring.parse(postData));
      res.writeHead(200,{'Content-Type':'text/plain'});
      res.end(postStr + "\n" + req.method);
    })
}).listen(3000,"127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

//request_post.js
var request = require("request");
request.get("http://127.0.0.1:3000",
    {form: {"name": "zula", "book": "node.js"}},
    function(err, response, result) {
        console.log("get", result);
})


//执行node app_post.js
//执行node request_post.js
//输出:{"name": "zula", "book": "node.js"} POST

Formidable模块

解决文件上传

案例

//app.js
var formiadable = require("formidable"),
http = require("http"),
util = require("util");

http.createServer(function(req, res) {
    if (req.url == '/upload' && req.method.toLowerCase() == "post") {
        //pase a file upload
        var form = new formiadable.IncomingForm(); //new 一个form对象
        //解析post数据
        form.parse(req, function(err, fields, files) {
            res.writeHead(200, {"content-type": "text/plain"});
            res.write("received upload:\n\n");
            //util.inspect 将json对象转化为字符串
            res.end(util.inspect({fields: fields, files: files}));
        });
        return;
    }
    //show a file upload form
    res.writeHead(200, {"content-type": "text/html"});
    /*http相应html信息*/
    res.end (
        '<form action="/upload" enctype="multipart/form-data" method="post">' +
        '<input type="text" name="title"/></br>' +
        '<input type="file" name="upload"  multiple="multiple"/></br>' +
        '<input type="submit" value="Upload"/>' +
        '</form>'
    )
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

运行结果:

image

image


撒花~~读书笔记真不容易写(┬_┬)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值