var http = require('http')
var server = http.createServer();
server.on('request', function (req, res) {
res.statusCode = 404;
res.statusMessage = "Not Found";
res.end();
})
server.listen(8888, function () {
console.log("http://localhost:8888")
})
UISocketRender EngineJavaScript EngineStorage
请求 2. 处理 3. 响应
LTSCurrent
REPL
执行文件
fs.writeFile(文件路径, 写入内容, 编码格式, 回调函数) 写入默认字符编码为utf8
fs.readFile(文件路径, 编码格式, 回调函数)
__dirname__filename
path.join(路径的一部分, 路径的一部分, 路径的一部分)
var http = require('http')
var server = http.createServer();
server.on('request', function(req, res){
// ...
res.end("响应结束")
})
server.listen(8888, function(){
})
res.setHeader(key, value) 一次只能设置一个响应头键值对
res.writeHead(statusCode, statusMessage, {}) 一次只能设置多个响应头键值对
这两个方法都必须在write之前调用!
write: 向浏览器返回数据 字符串 buffer对象end:statusCodestatusMessage
获取请求地址中的 路径+参数
根据不同的url地址返回不同的内容
request对象中的内容
var http = require('http')
var server = http.createServer();
server.on('request', function (req, res) {
// req.url: 请求地址中的 路径和参数
// req.headers: 请求报文中的请求头信息,他是一个对象!
// req.rawHeaders: 请求报文中的请求头信息,是一个数组!
// req.httpVersion: 浏览器发送的http请求的协议的版本号!
// req.method: 获取请求方式
console.log(req.headers);
// res.end("ok");
if (req.method == "POST") {
res.end("ok")
} else {
res.end("你的请求方式不被允许!!只能使用POST")
}
})
server.listen(8888, function () {
console.log('http://localhost:8888')
})
在node.js中获取请求参数-get
// get请求的参数是用?拼接在url地址后面的
// 如何获取get请求的参数?
var http = require('http');
var server = http.createServer();
var querystring = require('querystring')
var url = require('url');
server.on('request', function (req, res) {
// 获取get请求的参数
// console.log(req.url);
// 1. 自己动手,操作字符串获取参数信息
// var params = {};
// if (req.url.indexOf("?") != -1) {
// var querystring = req.url.split("?")[1];
// // querystring name=pm&age=18
// querystring.split("&").forEach(function (v, i) {
// // v name=pm
// // v age=18
// var temp = v.split('=');
// params[temp[0]] = temp[1];
// })
// console.log(params);
// }
// 2. 使用querystring模块直接实现查询字符串的解析
// if (req.url.indexOf("?") != -1) {
// var str = req.url.split("?")[1]
// var params = querystring.parse(str);
// console.log(params);
// }
// 3. 使用url模块进行参数的解析
// req.url /?name=pm&age=18
// url.parse方法可以将url字符串转换成对应的对象
// 有两个参数:
// url.parse(url, parseQueryString);
// url: 要进行解析的url字符串
// parseQueryString: 是一个布尔值,如果为true则最终解析出来的query是一个对象!如果是false则是一个字符串
var urlObj = url.parse(req.url, true);
// urlObj: pathname: 路径部分的内容
// query: 参数部分的内容 默认情况下是一个字符串
console.log(urlObj.query);
res.end("ok");
})
server.listen(8888, function () {
console.log('http://localhost:8888')
})
在node.js中获取请求参数-post
// post请求的参数是在请求体中的!
// 如何获取post请求参数呢?
var http = require('http');
var server = http.createServer();
var querystring = require('querystring');
var fs = require('fs')
server.on('request', function (req, res) {
// 获取post请求的参数
// 0. 定义一个数组,用来存放每次接收到的数据
var bufferList = [];
// 1. 给req对象注册一个事件 data事件
// 当有post请求的数据发送到服务器的时候,就会触发这个事件
req.on('data', function (chunk) {
// post请求的数据可能会分多次发送给服务器
// 每次发送给服务器都会触发data事件
// 每次发送的数据可以通过chunk来接收 chunk是一个buffer对象
// console.log(chunk);
// 每次有新数据来就将数据添加到数组中
bufferList.push(chunk);
})
// 2. 给req对象注册一个事件 end事件
req.on('end', function () {
// end事件会在post数据发送完毕之后,触发
// 如果要获取数据,肯定需要在end事件中进行获取!
// 需要将数组中所有的buffer对象合并成一个buffer对象
// 我们可以通过Buffer.concat方法进行buffer对象的合并
var result = Buffer.concat(bufferList);
fs.writeFile("./1.jpg", result, function (err) {
console.log("ok")
})
// 如果要获取参数 则直接将result转换成字符串即可
// console.log(result.toString());
// 最后使用querystring模块,将这个参数字符串转换成对象即可!
// var params = querystring.parse(result.toString());
// console.log(params);
})
res.end('ok');
})
server.listen(8888, function () {
console.log('http://localhost:8888');
})
request.urlrequest.headersrequest.rawHeadersrequest.methodrequest.httpVersion
querystring
var querystring = require('querystring')
// key=value&key=value 查询字符串
var obj = querystring.parse("key=value&key=value")
url
var url = require('url');
var obj = url.parse("/index.html?id=10", true)
// obj.query
// obj.pathname
var bufferList = [];
req.on("data", function(chunk){
bufferList.push(chunk);
})
req.on("end", function(){
var result = Buffer.concat(bufferList);
// result.toString(); // key=value&key=value;
var params = querystring.parse(result.toString())
// fs.writeFile("", result, function(){})
})
Node Package Manager node包管理工具
包是什么???
npm服务器
npm网站
npm命令行工具
只要安装好了node, 那么npm就自动安装好了
在node装完之后,全局就有一个npm命令可以使用了
初始化一个pacakge.json文件npm init
npm init -y
如果当前文件夹名称包含中文等特殊字符,则npm init命令执行会报错,报错之后pacakge.json文件中的name和version属性为空,需要自己手动的补全!!
下载包(本地安装)下载的包会放到当前项目中的node_modules文件夹中! npm install 包名
npm install 包名@版本号
npm i 包名
npm i 包名@版本号
npm install 包名 包名1 包名2
卸载包npm uninstall 包名
当要使用一个包,这个包会提供一个全局命令的时候,这个包就需要被全局安装!
命令npm install 包名 -g
npm install 包名 --global
live-servernpm install less -g
package.json文件就是用来描述一个包的信息的!
只要一个文件夹中有一个合格的pacakge.json文件,那么这个文件夹就可以被称为是一个包!
合格的定义: 必须包含两个属性 name version
name: 包名 不能有中文,不能有空格,不能有大写字母,不能有特殊字符!version: 版本信息
description: 描述信息author: 作者keywords: 关键词 方便在npm网站上进行搜索license: 开源协议 自己指定
scripts: 放的就是一些shell命令,这些命令可以通过 npm run 命令别名
进行执行
可以省略run执行的命令别名: start stop restart test config 例如`npm start`
dependencies:devDependencies:
一般的版本号都会包含3个数字,中间用.隔开格式: 主版本号.次版本号.修订版本号
主版本号: 当代码功能更新,更新之后,不兼容之前的版本了,那么需要更新主版本号!此版本号: 当代码功能更新,更新之后,依然兼容之前的版本,只是新增了某些功能,那么需要更新次版本号修订版本号: 当代码更新,更新的只是修复了某些BUG,或者优化了某些功能,那么这个时候只需要更新 修订版本号就可以了
jquery: 1.x 2.x 3.x1.10.1 1.12.41.12.1 1.12.4
这两个属性中保存的都是当前包所有的依赖信息。
dependencies: 运行时依赖项,在将代码上传到服务器时,这个包仍被需要devDependencies: 开发时依赖项,这个依赖项只需要在开发时时候,上传到服务器的时候不需要!
问题: 为什么要将依赖项信息存储起来呢???主要目的是为了代码共享的时候,比较方便!
在进行代码分享的时候,不需要分享node_modules,只需要分享自己的代码和pacakge.json即可,另外的程序员拿到代码之后,自己根据pacakge.json下载所有的依赖项即可!
npm install
这条命令会自动根据package.json中保存的包信息进行下载 (devDependencies+dependencies)
只下载运行时依赖项可以使用命令npm install --production
在早期版本的npm中,依赖项信息不会自动保存!
将依赖项的信息保存到dependenciesnpm install 包 --save
npm install 包 -S
将依赖项的信息保存到devDependenciesnpm install 包 --save-dev
npm install 包 -D
npm服务器是在国外的,所以下载速度会比较慢,所以我们可以设置npm,让其下载包的时候,从国内的服务器上进行下载。
设置npm让其从国内服务器下载,需要用到一个工具,这个工具就是nrm
npm install nrm -g
查看可用的服务器列表nrm ls
查看当前正在使用的服务器nrm current
切换到指定的服务器nrm use 服务器名称
测速命令nrm test
nrm test 指定的服务器名称
phpstudy的作用: 可以将浏览器请求的文件从根目录中找到进行返回
var http = require('http')
var server = http.createServer();
var fs = require('fs');
var path = require('path');
var mime = require('mime');
server.on('request', function(req, res){
// 1. 制定路由规则,对每个文件进行挨个处理 (先做了首页)
// 2. 将req.url用作读取文件的路径
// 3. 为每个类型的文件设置不同的Content-Type 用到mime
// 4. 设置在访问/的时候也能够访问到首页
if(req.url == "/"){
req.url = "/index.html"
}
res.setHeader("Content-Type", mime.getType(req.url));
fs.readFile(path.join(__dirname, 'public', req.url), function(err, data){
res.end(data);
})
})
server.listen(8888, function(){
console.log('http://localhost:8888')
})
url: 请求地址中的路径+参数
headers: 请求头中的内容,是一个对象
rawHeaders: 请求头中的内容,是一个数组
method: 请求方式 是大写的GET POST
httpVersion: http协议的版本号
querystring
var querystring = require('querystring');
var params = querystring.parse("key=value&key=value")
url(推荐使用)
var url = require('url')
var urlObj = url.parse(req.url, true);
// urlObj.pathname 就是路径部分
// urlObj.query 就是参数对象
var querystring = require('querystring')
//1. 定义一个数组用来存储每次提交上来的数据
var bufferList = [];
//2. 为req对象注册data事件 该事件会在每次有数据提交到服务器的时候被触发
req.on('data', function(chunk){
//chunk就是每次提交上来的数据 buffer对象
//将每次提交的数据存储到数组中
bufferList.push(chunk);
})
//3. 为req对象注册end事件 该事件会在数据提交完毕之后触发
req.on('end', function(){
// 将bufferList中所有的buffer对象合并成一个
var result = Buffer.concat(bufferList);
// 如果要获取post请求参数 则需要将这个对象转成字符串
var qs = result.toString();
// 使用querystring模块将获取到的post参数字符串转成对象
var params = querystring.parse(qs);
})
npm是node包管理工具
一组被pacakge.json描述的文件! (如果一个文件夹中有一个合法的package.json文件,那么这个文件夹就是一个包)
npm服务器 存储包
npm网站 浏览包
npm命令行工具 操作包(上传、下载)
创建一个package.json文件 一个项目只需要执行一次npm init
npm init -y
如果文件夹名称中包含中文或者特殊字符,则创建会报错,但是文件会正常创建出来,需要手动的添加name和version的值
下载包(本地安装)npm install 包名
npm install 包名@版本号
npm i 包名
npm i 包名@版本号
npm install 包名 包名 包名
npm install
下载依赖项中所有的包npm install --production
下载所有运行时依赖项
卸载包npm uninstall 包名
当需要安装的包要提供一个全局命令的时候,这个包就需要进行去全局安装npm install 包名 -g
npm install 包名 --global
live-serverlessnrm
必须包含的两项: name 和 version
scripts: 给shell命令起别名,可以通过别名进行执行 npm run 别名
可以省略run的别名: start restart stop test config
dependencies: 运行时依赖项npm i 包名
npm i 包名 --save
npm i 包名 -S
devDependencies: 开发时依赖项npm i 包名 --save-dev
npm i 包名 -D
为npm提速(可以切换下载服务器)
查看所有的可用服务器列表
nrm ls
切换到指定的服务器
nrm use 服务器名称
查看当前正在使用的服务器
nrm current
测试所有服务器的速度
nrm test
测试指定服务器的速度
nrm test 服务器名称
创建了项目文件夹
将views文件夹和resources文件移动到项目文件夹
创建了app.js
书写了基本的http服务器代码
制定基本的路由规则(3 ==> 4 ==> 5)
在路由规则中返回简单的字符串 进行测试
加一条路由规则 404
实现首页的功能(读取首页的html文件返回)
css和图片无法处理(又要新增一条路由规则, 判断req.url是否以/resources开头)
在静态资源的路由规则中,使用phpStudy的类似逻辑实现静态资源的返回
详情页和添加页实现
优化了详情页的路由规则 (url模块)