Node.js简介

Node.js简介

前言:
Node.js之所以是一个出色的框架,主要是基于以下几个原因:
- JavaScript端到端:Node.js最大的一个优点在于,它可以让你用JavaScript同时编写服务器端和客户端脚本。在决定是把逻辑放入客户端脚本还是服务器端脚本方面一直有困难。利用Node.js,你可以在客户端上编写JavaScript,并轻松地在服务器上适应它,反之亦然。另一个好处是,客户端的开发者和服务器的开发者使用同一种语言。
- 事件驱动的可扩展性:Node.js应用独特的逻辑来处理Web请求。使用Node.js,不是让多个线程等待处理Web请求,而是采用一种基本的事件模型在同一个线程上处理它们。这使得Node.js Web服务器可以用传统的Web服务器不能做到的方式进行扩展。


- 可扩展性:Node.js有很多的追随者和活跃的开发社区。人们正在不断地提供新的模板来扩展Node.js的功能。此外,在Node.js中安装和包含新的模块是非常简单的,可以在几分钟扩展Node.js的项目来包含新的功能。
- 快速执行:建立Node.js,并在其中开发是超级容易的。在短短的几分钟内就可以安装Node.js,并拥有一个能工作的Web服务器。

Node.js创建应用

首先了解Node.js是由哪几部分组成:、
1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块
2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器
3. 接收请求与响应请求:服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据

实例:

var http = require('http');  //引入required模块,实例化HTTP变量赋值给变量http

http.createServer(function (request, response) {

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888);

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

使用node命令执行上述代码:

node server.js
Server running at http://127.0.0.1:8888/

分析Node.js 的 HTTP 服务器:
- 第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
- 接下来调用 http 模块提供的函数: createServer 。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。

NPM使用介绍

NPM是随同Node.js一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用

使用 npm 命令安装模块

npm 安装 Node.js 模块语法格式如下:

$ npm install <Module Name>
以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express
$ npm install express
安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require(‘express’) 的方式就好,无需指定第三方包路径。
var express = require('express');

安装过程输出如下内容,第一行输出了模块的版本号及安装位置,如下所示:

使用 package.json

package.json 位于模块的目录下,用于定义包的属性。看下 express 包的 package.json 文件,位于 node_modules/express/package.json 内容:

    {
      "name": "express",
      "description": "Fast, unopinionated, minimalist web framework",
      "version": "4.13.4",
      "author": {
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
      },
      "contributors": [
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    },
    {
      "name": "Ciaran Jessup",
      "email": "ciaranj@gmail.com"
    },
    {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "Guillermo Rauch",
      "email": "rauchg@gmail.com"
    },
    {
      "name": "Jonathan Ong",
      "email": "me@jongleberry.com"
    },
    {
      "name": "Roman Shtylman",
      "email": "shtylman+expressjs@gmail.com"
    },
    {
      "name": "Young Jae Sim",
      "email": "hanul@hanul.me"
    }
      ],
      "license": "MIT",
      "repository": {
    "type": "git",
    "url": "https://github.com/expressjs/express"
      },
      "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
      ],
      "dependencies": {
    "accepts": "~1.2.12",
    "array-flatten": "1.1.1",
    "content-disposition": "0.5.1",
    "content-type": "~1.0.1",
    "cookie": "0.1.5",
    "cookie-signature": "1.0.6",
    "debug": "~2.2.0",
    "depd": "~1.1.0",
    "escape-html": "~1.0.3",
    "etag": "~1.7.0",
    "finalhandler": "0.4.1",
    "fresh": "0.3.0",
    "merge-descriptors": "1.0.1",
    "methods": "~1.1.2",
    "on-finished": "~2.3.0",
    "parseurl": "~1.3.1",
    "path-to-regexp": "0.1.7",
    "proxy-addr": "~1.0.10",
    "qs": "4.0.0",
    "range-parser": "~1.0.3",
    "send": "0.13.1",
    "serve-static": "~1.10.2",
    "type-is": "~1.6.6",
    "utils-merge": "1.0.0",
    "vary": "~1.0.1"
      },
      "devDependencies": {
    "after": "0.8.1",
    "ejs": "2.3.4",
    "istanbul": "0.4.2",
    "marked": "0.3.5",
    "mocha": "2.3.4",
    "should": "7.1.1",
    "supertest": "1.1.0",
    "body-parser": "~1.14.2",
    "connect-redis": "~2.4.1",
    "cookie-parser": "~1.4.1",
    "cookie-session": "~1.2.0",
    "express-session": "~1.13.0",
    "jade": "~1.11.0",
    "method-override": "~2.3.5",
    "morgan": "~1.6.1",
    "multiparty": "~4.1.2",
    "vhost": "~3.0.1"
      },
      "engines": {
    "node": ">= 0.10.0"
      },
      "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
      ],
      "scripts": {
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
      },
      "gitHead": "193bed2649c55c1fd362e46cd4702c773f3e7434",
      "bugs": {
    "url": "https://github.com/expressjs/express/issues"
      },
      "homepage": "https://github.com/expressjs/express",
      "_id": "express@4.13.4",
      "_shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
      "_from": "express@latest",
      "_npmVersion": "1.4.28",
      "_npmUser": {
    "name": "dougwilson",
    "email": "doug@somethingdoug.com"
      },
      "maintainers": [
    {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
    }
      ],
      "dist": {
    "shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
    "tarball": "https://registry.npmjs.org/express/-/express-4.13.4.tgz"
      },
      "directories": {},
      "_resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz"
    }
Package.json 属性说明
  • name - 包名
  • version - 包的版本号
  • description - 包的描述
  • homepage - 包的官网 url
  • author - 包的作者姓名
  • contributors - 包的其他贡献者姓名
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上
  • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require(“express”)
  • keywords - 关键字
NPM常用命令
选项说明示例
search在存储库中查找模块包npm search express
install使用在存储库或本地位置的一个package.json文件来安装包npm install express
install -g在全局可访问的位置安装一个包npm install express -g
remove删除一个模块npm remove express
pack把在一个package.json文件中定义的模块封装成.tgz文件npm pack
view显示模块的详细信息npm view express
publish把在一个package.json文件中定义的模块发布到注册表npm publish
unpublish取消发布已发布的一个模块npm unpublish myModule
owner允许在存储库中添加、删除包和列出包的所有者npm add bdayley myModule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值