什么是nodejs?
-
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
-
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
-
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
nodejs 编写及运行
一:打开终端:windows-开始-运行-cmd
或者,直接打开一个文件夹,在文件夹的地址栏中输入cmd回车,进入终端
测试服务器是否支持node环境:node -v 回车
进入node环境:node 回车
编写代码:function sum(a,b){return a+b} sum(3,7) 回车之后,终端中就会显示sum运行后的结果10
不好的地方:代码不能长时间保存
退出:从node环境退回到命令行环境
连续两次 ctrl+c
二:编写一个.js文件,在该文件中,编写js代码,在终端中执行这个文件
注意:在终端中执行文件时注意路径是否正确
c:/users/wangyang/1.js
```
function sum(a, b){
return a+b;
}
console.log( sum(1,2) )
```
在终端中,执行 node 1.js,前提是命令行必须在wangyang目录下,然后通过 node 1.js 才能找到对应的文件。
如果不在同一个文件夹中
1, node abc/1.js
2, cd abc
node 1.js
重启服务
js文件编写好了之后,在终端中执行 node app.js 能够挂起服务,如果修改app.js文件,需要重启服务才能让修改后的代码起作用,如果重启服务
ctrl + c // 终止服务
node app.js // 启动服务 node app 也可以省略文件扩展名,简写启动服务
热部署工具
- 在开发时,代码是需要经常修改的,但是修改后是无法直接访问的,必须重启服务才行。所以采用热部署工具,让代码修改后,服务器能够自动重启,这样就减轻了我们的工作。
手动重启的方法: ctrl+c // 终止 node app.js // 执行
自动重启的方法:
npm install nodemon –g
nodemon app.js
npm install supervisors –g
supervisors app.js
http 模块
- http模块创建网站服务
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
response.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
// IP地址
console.log(request.connection.remoteAddress);
// 发送响应数据
response.end('Hello World');
}).listen(8080);
- http路由:
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200,{
'Content-Type':'text/html;charset=utf-8',
'Access-Control-Allow-Origin':'*'
});
console.log(request.url);
response.end();
}).listen(8080);
- 接收GET数据:
require("url").parse(request.url, true).query
- 接收POST数据:
var post = '';
request.on('data', function(chunk){
post += chunk;
});
request.on('end', function(){
post = require("querystring").parse(post); // {a:1,b:2}
});
-
模块化开发:
如果所有的代码都写在同一个js文件中,那么会导致文件越来越大,所以我们可以采用模块化的写法,把代码分离出来。
-
建立模块
比如我们做一个sum.js文件,里面写入:
module.exports = function(a, b){return a+b}
-
使用模块
var sum = require("./sum"); // 载入sum.js文件
sum(1, 2); // 3NodeJS 属于 CommonJS 规范,可以理解成用 exports 输出模块,用 require 引入模块。
express模块
// step1: 先下载express模块
// npm install express
// step2: 引入express模块
const express = require("express");
// step3: 使用模块
const app = express(); // 获取express对象,这个对象提供了很多功能
// 开发一个网站站点
// 定义一个路由规则
// app.get("/", callback回调函数) 语义指用户使用get方式请求我们网站的根目录时,执行callback回调函数
app.get("/", function(req, res){ // req指请求(request) res指响应(response)
console.log(req.ip, "访问了服务器");
res.send("这是首页"+ req.ip.substring(7) +"访问了这个页面");
})
app.listen(8080); // 监听8080端口 65535以内
get 参数
const http = require("http");
const url = require("url"); // 系统模块,无需install
http.createServer(function(req, res){
res.writeHead(200, {
"content-type":"text/html;charset=utf-8"
});
//console.log(req.url);
let router = url.parse(req.url, true);
let query = router.query;
if( router.pathname === "/" ){
res.end(`
<form method="get" action="/chk">
用户名:<input type="text" name="username" /><br>
密码:<input type="text" name="password" /><br>
<input type="submit" value="提交" />
</form>
`);
}else if( router.pathname === "/chk" ){
res.write( query.username+"<br>"+query.password );
res.end();
}else{
res.end("其他的请求");
}
}).listen(8080);
post 参数
const http = require("http");
const url = require("url");
const querystring = require("querystring");
http.createServer(function(req, res){
// 中文乱码和html解析
res.writeHead(200, {
"content-type":"text/html;charset=utf-8"
});
// 路由规则
let router = url.parse(req.url, true);
switch( router.pathname ){
case "/":
res.end(`
<form method="post" action="/chk">
用户名:<input type="text" name="username" /><br>
密码:<input type="text" name="password" /><br>
<input type="submit" value="提交" />
</form>
`);
break;
case "/chk":
// 监听 post 数据
// 得到一部分请求中的数据时,就执行的回调函数
var chunks = "";
//req.on(data)指每次发送的数据;
req.on("data", function( chunk ){
//console.log( chunk.toString() )
chunks += chunk;
});
//req.on(end)数据发送完成;
req.on("end", function(){
//console.log(chunks)
//console.log( querystring.parse(chunks) )
//console.log( querystring.stringify({ username: "123", password: "456456" }) )
var body = querystring.parse(chunks);
//console.log( body.username );
res.write( body.username+"<br>"+body.password );
res.end("处理");
})
break;
default:
res.end("");
}
}).listen(8080);
什么是后端?什么是前后端分离?什么是webservice?什么是路由?如何接收请求中的数据?如何模块化开发?