Nodejs

本文详细介绍了Node.js的安装步骤,基本知识包括回调函数、事件、Buffer和Stream的使用,以及如何通过Express处理路由和接收数据。同时,文章还讲解了npm的使用,包括安装、卸载和使用淘宝镜像等技巧。
摘要由CSDN通过智能技术生成

nodejs
nodejs是javascript语言编写的一个后台,nodejs实现的是后台功能

一.nodejs安装

1…msi 安装,安装选择下一步

2.运行node的环境是命令行功能
开始->cmd
win+r
打开的命令行功能默认的是C盘下的用户盘符

3.命令行工具常用命令

1.切换算盘 c盘->d盘 d:
2.进入文件夹:cd 文件夹名字
3.退出文件夹:cd …/
4.查看文件:dir
5.清空命令行:cls
6.创建文件夹:mkdir 文件夹名字
7.常用快捷键方式
tab:自动补全
上下键:查看输入历史纪录
在指定文件夹中快速打开命令行工具:找到指定文件夹,在文件夹中
shift+鼠标右键,在右键菜单中选‘在此打开命令行窗口’
8.停止当前命令:ctrl+c
定时关机:shutdown -s -t 秒数
取消定时关机:shutdown -a

二.nodejs的基本知识

1.体验nodejs
运行:在命令行工具中 node 文件名

 //引入模块
var http=require('http')

//创建服务器:地址是local host:3000端口下开启的一个服务
http.createServer(function (req,res) {
    //request 和 response 对象来处理请求和响应的数据,
    // request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性
    //response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据
    //设置字符编码
    res.writeHead(200,{'content-type':'text/plain','charset':' utf-8'})
    //writeHead:这个方法有两个参数,第一个参数表示对应的编码的状态值,第二个表示对应的设置
    //请求结果
    res.end('体验nodejs')
}).listener(3000)

console.log('服务已启动')

2.需要了解的知识
1.回调函数
nodejs所有的函数都是异步执行的,适合做高并发(成本低),回调函数是异步执行的体现
回调函数中第一个参数是错误信息,第二个参数是请求成功返回的结果

2.事件
nodejs是事件驱动的,事件只要被提交就会自动进入事件队列中,事件队列会在事件循环中执行,当事件循环中某一事件执行完成后,会执行这个事件的回调函数。

注册事件:on()
执行事件:emit()

3.buffer
缓冲器:专门用来处理二进制数据的,js本身不能直接处理二进制,在后台的很多数据都是二进制的,所以nodejs定义了一个buffer专门来处理二进制数据

4.stream
流数据:后台中有很多数据都是以流数据形式传递的,所以nodejs中也封装了处理流数据的stream类

5.模块
nodejs是依据CommonJS编写的,符合CommonJS的规范,每个模块都是一个独立的功能,有独立的作用域模块的导入导出也是符合CommonJS的
导入:require(模块名)
导出:module.exports
nodejs中有很多已经定义好的模块(http/fs/os/path/url),这些模块都有自己的属性和方法,使用时需要查询API

三.npm

1.npm是下载nodejs时附带的一个工具,通过这个工具可以从npm官网下载程序

2.npm命令:
查看版本: npm -v
初始化package:npm init
packag.json是一个文件,这个文件中会保存当前的程序(应用)的基本信息、程
序的运行命令、程序的依赖、浏览器要求等等
安装程序:npm install 程序名 ***参考express官网
全局安装:npm install -g 程序名
项目安装
a. npm install --save-dev 程序名 安装的程序会在package.json的devDependencies出现,这个对象中的数据都是开发环境中使用的,生产环境下是不需要的
b. npm install --save 程序名 安装的程序会在package.json的dependencies出现,这个对象中的数据 是开发环境、生产环境下中都需要的
卸载程序:npm uninstall 程序名

3.淘宝镜像:npm install -g cnpm --registry=http://registry.npm.taobao.org
速度快,国内的,使用时把npm换成cnpm即可

4.使用node_modules中的程序时: 不需要加node_modules文件夹的名字,直接使用程序名

四.路由接收数据

1.get请求
第一种:url?uname=feifei&uname=wanwan
获取前台通过这种形式传递的数据,需要使用nodejs中的一个基础模块 url

       url.parse(urlString,true)    //需要解析的url字符串,true表示会生成一个对象

urlString:需要通过req.url来获取
终止传递的数据在url.parse()返回值的query属性中,query中的值是对象形式的

//引入express程序
var express=require('express');
//引入url模块
var url=require('url');
//生成express的实例化对象
var app=express();

//路由
app.get('/',function (req, res) {         //斜杠/表示一进根目录就要请求数据
    res.send('hello world');
})
app.get('/boy',function (req, res) {
    //获取urlString ,req是前端发来的请求,写在域名后面+?
    var urlString=req.url
    //转成对象,保留query
    var urlObj=url.parse(urlString,true)
    console.log(urlObj.query)
    res.send('feifei');
})
app.get('/girl',function (req, res) {
    res.send('wanwan');
})

//post接口
app.post('/we',function (req, res) {
    res.send('feifeiwanwan');
})

var server=app.listen(3000,function () {
    console.log('服务器启动了')
})

第二种:url/xiaoming/18 知乎网携带数据形式就是这种 restful
获取restful数据参数:
第一步:需要在接口中配置
app.get(’/boy/:uname/:age’)
第二步:获取
app.get(’.boy/:uname/:age’,function(req,res){
req.params(‘uname’)
})
代码:

var express=require ('express')
var app=express();

//get路由,携带数据 url/query1/query2

app.get('/boy/:uname/:age',function (req,res) {
    res.send(req.params)
})

 app.listen(3333,function () {
     console.log('启动3333端口')
 })

2.post请求
注意1:在获取post参数时需要额外引入一个组件 body-parser,然后需要配置这个组件
var bodyParser=require(‘body-parser’)
app.use(bodyParser.urlencoded({
extended:true
}))
注意2:使用postMan来测试post接口时,需要携带的参数要选body选择中的x-www-urlcoded
第一种:req.body来获取,建议使用
第二种:req.params()来获取,不建议使用
代码:
var express=require(‘express’)
//引入一个能让post接收参数的组件body-parser
var bodyParser=require(‘body-parser’)

var app=express();

//配置body-parser
app.use(bodyParser.urlencoded({
    extended:true 
}))

//配置解决跨域问题的方法
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});
    
//post路由
app.post('/girl',function (req,res) {
    //通过req.body来获取
    //res.send(req.body)
    //通过req.params()方法来获取,建议使用req.body来获取
    console.log(req.param('name'))
    res.send('请求完成')
})

app.listen(3000,function () {
    console.log('启动3000')
})

五.跨域问题

//配置解决跨域问题的方法
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值