当前位置:   article > 正文

什么是nodejs?_nodejs到底是什么

nodejs到底是什么

什么是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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二:编写一个.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    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

重启服务

js文件编写好了之后,在终端中执行 node app.js 能够挂起服务,如果修改app.js文件,需要重启服务才能让修改后的代码起作用,如果重启服务

ctrl + c    // 终止服务
node app.js // 启动服务      node app 也可以省略文件扩展名,简写启动服务
  • 1
  • 2

热部署工具

  • 在开发时,代码是需要经常修改的,但是修改后是无法直接访问的,必须重启服务才行。所以采用热部署工具,让代码修改后,服务器能够自动重启,这样就减轻了我们的工作。
手动重启的方法:	ctrl+c // 终止		node app.js // 执行

自动重启的方法:

    npm install nodemon –g
	nodemon app.js

	npm install supervisors –g
	supervisors app.js
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 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);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 接收GET数据:
	require("url").parse(request.url, true).query
  • 1
  • 接收POST数据:
	var post = '';         
	request.on('data', function(chunk){
		post += chunk;    
	});    
	request.on('end', function(){            
		post = require("querystring").parse(post);	// {a:1,b:2}	
	});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 模块化开发:

    如果所有的代码都写在同一个js文件中,那么会导致文件越来越大,所以我们可以采用模块化的写法,把代码分离出来。

  • 建立模块

    比如我们做一个sum.js文件,里面写入:

    module.exports = function(a, b){return a+b}

  • 使用模块

    var sum = require("./sum"); // 载入sum.js文件
    sum(1, 2); // 3

    NodeJS 属于 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以内

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
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);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
什么是后端?什么是前后端分离?什么是webservice?什么是路由?如何接收请求中的数据?如何模块化开发?

后端
前后端分离

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/860955
推荐阅读
相关标签
  

闽ICP备14008679号