首页 > 编程语言 >node.js

node.js

时间:2023-12-27 18:36:44浏览次数:36  
标签:node http url res req js const method

  • npm 安装的包,dependences 下的包和 devDependences 下得包有什么区别

    dependences:生产环境使用的包,代码运行必要的包,没有包运行时会报错,如lodash

    decDdpendences:开发环境使用的包,代码运行不必要,没要包代码也能跑,使用这些包的目的是方便开发人员做项目,如webpack、nodemon等,项目上线之后这些包就没用了

  • 软件包的安装位置

    本地安装 / 局部安装:npm install 包名,被安装在当前文件夹下得 node_modules 子文件夹下,只有当前项目能用(推荐使用)

    全局安装:npm install 包名 -g ,包将装在全局的位置,可以使用 npm root -g 查看全局的位置

  • 查看已经安装的包:npm list
  • 安装包版本规则:

    默认情况下,npm install --save 下载的都是最新版本,并且会在 package.json 文件里登记一个最优版本号

    ~ 会匹配最新的小版本依赖包,比如 ~1.2.3 会匹配所有的 1.2.x 版本,不包括 1.3.0

    ^ 会匹配最新的大版本依赖包,比如 ^1.2.3 会匹配所有的 1.x.x 的包,包括 1.3.0,但是不包括 2.0.0

    直接写 * 会安装最新版本的依赖包

    前面不加任何符号代表安装特定的版本

  • 卸载包

    局部安装卸载:npm uninstall 包名

    全局安装卸载:npm uninstall -g 包名

 

  • commonjs 模块化

    module.exports 导出,require() 导入,主要用于 node.js 开发

  • 模块的三种分类

    1. 系统自带模块,不用安装,直接使用,如 http

    2. npm 包,需要安装之后才能使用,如 lodash

    3. 自定义模块,自己写的,不用安装

    Tips: require 会先找系统自带的,再找 npm 包,最后再自定义

  • commonjs 和 ES module 的区别

    1. 两者语法不一样

    2. commonjs 是执行时引入的,动态的,意味着可以写在任何位置

    3. ES6 Module 是打包时引入的,静态的,必须卸载第一行,因为要先引入

  • nodejs 和 前端 js

    都是使用 JS 语法

    前端 JS 使用 浏览器提供的 WEBAPI,前端JS = ES + DOM +BOM

    nodejs 使用 nodejs API,nodejs = ES + nodejs API

  • nodejs 处理 http 请求
    • req(request)和 res(response),请求和响应,是 http 请求的关键
// commonjs 引入模块, node自带模块, 不需要安装
const http = require("http");

// createServer可以创建一个服务, 不过需要接收一个回调函数做参数
//createServer有两个形参,一个是 req(请求),一个是 res(响应)
const server = http.createServer((req,res) => {
    //req.url() 可以获取请求的 url
    const url = req.url;

    //res.end() 可以设置返回给前端的信息 
    res.end("the url is" + url);
});
// 监听3000端口
server.listen(3000);
// 输出提示
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");

 

    • 定义 GET 路由
// commonjs 引入模块, node自带模块, 不需要安装
const http = require("http");

// createServer可以创建一个服务, 不过需要接收一个回调函数做参数
//createServer有两个形参,一个是 req(请求),一个是 res(响应)
const server = http.createServer((req,res) => {
    //req.url() 可以获取请求的 url
    const url = req.url;
    //req.method() 可与用来获取 method
    const method = req.method;
    //res.end() 可以设置返回给前端的信息 
    res.end(`url is ${url}, method is ${method}`);
});
// 监听3000端口
server.listen(3000);
// 输出提示
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");

 

    判断 method 和 url 是否正确

// commonjs 引入模块, node自带模块, 不需要安装
const http = require("http");

// createServer可以创建一个服务, 不过需要接收一个回调函数做参数
//createServer有两个形参,一个是 req(请求),一个是 res(响应)
const server = http.createServer((req,res) => {
    //req.url() 可以获取请求的 url
    const url = req.url;
    //判断条件改变,避免url带参数报错,对于带参数的路径,需要加上这个
    const path = url.split("?")[0];
    //req.method() 可与用来获取 method
    const method = req.method;

    //判断 method 和 url 是否正确
    if( path === "/api/list" && method.toUpperCase() === "GET"){
        res.end(`url is ${url}, method is ${method}`);
    }else{
        res.end(`请求错误,请确认路径和方法是否正确`);
    }
});
// 监听3000端口
server.listen(3000);
// 输出提示
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");

 

    • 定义 POST 路由,在 GET路由上多加一个判断
// commonjs 引入模块, node自带模块, 不需要安装
const http = require("http");

// createServer可以创建一个服务, 不过需要接收一个回调函数做参数
//createServer有两个形参,一个是 req(请求),一个是 res(响应)
const server = http.createServer((req,res) => {
    //req.url() 可以获取请求的 url
    const url = req.url;
    //判断条件改变,避免url带参数报错
    const path = url.split("?")[0];
    //req.method() 可与用来获取 method
    const method = req.method;

    //判断 method 和 url 是否正确
    if( path === "/api/list" && method.toUpperCase() === "GET"){
        res.end(`您正在请求留言列表接口`);
    }else if( path === "/api/create" && method.toUpperCase() === "POST"){
        res.end(`您正在请求提交留言接口`);
    }else{
        res.end(`请求错误,请确认路径和方法是否正确`);
    }
});
// 监听3000端口
server.listen(3000);
// 输出提示
console.log("http请求已经被监听, 3000端口, 请访问: http://localhost:3000");

 

 

  • querystring:url 中 ?后的参数称为querystring,也叫做 url 参数

    querystring 转对象:

// 引入querystring模块
const querystring = require("querystring");
consy http = require("http");

// 创建一个http服务
const server = http.createServer((req, res) => {
  // querystring转对象
  const queryObj = querystring.parse(queryStr);

  // 得到的结果 { number: '100', sort: 'desc' }
});

 

    hash 路由:http://xxx.com/index.html/#/home

    Tips:hash 路由不能由服务端获取,因为 require.url 只能获取到 /index.html/,hash 路由的相关数据可以使用 ajax 请求接口获取

  • 使用 res 返回数据
//引入 commonjs 模块
const http = require("http");

//创建一个服务
const server = http.createServer((req,res) => {
    //获取url
    const url = req.url
    //获取路径
    const path = url.split("?")[0];
    //获取方法
    const method = req.method;
    //判断路由满足条件
    if( path === "/api/list" && method.toUpperCase() === "GET"){
        //定义返回的请求头
        res.writeHead(200,{"Content-type": "application/json"});
        //定义返回体,包含错误码,返回数据和返回信息
        const responseBody = {
            errno: 0,
            data: [
                {username: '张三', content: '张三 真帅!'},
                {username: '李四', content: '李四 真帅!'},
                {username: '王五', content: '王五 真帅!'},
                {username: '赵六', content: '赵六 真帅!'}
            ],
            msg: 'success'
        }
        //res.end只能返回字符串,需要先将对象转换为字符串
        res.end(JSON.stringify(responseBody));
    }else if( path === "/api/create" && method.toUpperCase() === "POST"){
        //定义请求头
        res.writeHead(200,{"Content-type": "application/json"});
        //定义返回体
        const responseBody = {
            errno: 0,
            data:{ id: 1},
            msg: 'success'
        }
        //res.end的参数只能是数组
        res.end(JSON.stringify(responseBody));
    }else{
        //res.writeHead(404, {"Content-type": "text/plain"});
        res.end("404 Not Found");
    }
})
server.listen(3000);
console.log("正在监听3000端口……")

 

  • res 返回 HTML(比如 404网页 ,可以自己制作)
//只需将返回的形式改成html,再吧html代码写进res.end即可
else{
        res.writeHead(404, {"Content-type": "text/html"});
        res.end(`<!DOCTYPE html>
        <html lang="en">
            <head>
                <meta charset="UTF-8" />
                <meta http-equiv="X-UA-Compatible" content="IE=edge" />
                <meta name="viewport" content="width=device-width, initial-scale=1.0" />
                <title>Document</title>
                <style>
                    * {
                        padding: 0;
                        margin: 0;
                    }
                    img {
                        width: 100%;
                    }
                </style>
            </head>
            <body>
                <img src="https://markdown-1253389072.cos.ap-nanjing.myqcloud.com/202203191544993.png" alt="" />
            </body>
        </html>`);
    }

 

  • 发送留言的接口
//引入 commonjs 模块
const http = require("http");

//创建一个服务
const server = http.createServer((req, res) => {
    //获取url
    const url = req.url
    //获取路径
    const path = url.split("?")[0];
    //获取方法
    const method = req.method;


    //判断路由满足条件
    if (path === "/api/list" && method.toUpperCase() === "GET") {
        //定义返回的请求头
        res.writeHead(200, { "Content-type": "application/json" });
        //定义返回体,包含错误码,返回数据和返回信息
        const responseBody = {
            errno: 0,
            data: [
                { username: '张三', content: '张三 真帅!' },
                { username: '李四', content: '李四 真帅!' },
                { username: '王五', content: '王五 真帅!' },
                { username: '赵六', content: '赵六 真帅!' }
            ],
            msg: 'success'
        }
        //res.end只能返回字符串,需要先将对象转换为字符串
        res.end(JSON.stringify(responseBody));
    } else if (path === "/api/create" && method.toUpperCase() === "POST") {
        let bodyString = '';
        //获取数据
        req.on("data", (chunk) => {
            bodyString += chunk.toString();
        })
        req.on("end", () => {
            let responseBody = {};
            //定义请求头
            res.writeHead(200, { "Content-type": "application/json" });
            //判断数据是否是json格式
            if (req.headers["content-type"] === "application/json") {
                //将字符串转为对象
                const bodyObj = JSON.parse(bodyString);
                //定义返回体
                responseBody = {
                    errno: 0,
                    data: { id: 1, ...bodyObj },
                    msg: '留言创建成功!'
                }
            }else{
                responseBody = {
                    errno: 1,
                    msg: "携带数据的格式不正确!"
                }
            }
            //res.end的参数只能是数组
            res.end(JSON.stringify(responseBody));
        })
    } else {
        res.writeHead(404, { "Content-type": "text/html" });
        res.end(`<!DOCTYPE html>
        <html lang="en">
            <head>
                <meta charset="UTF-8" />
                <meta http-equiv="X-UA-Compatible" content="IE=edge" />
                <meta name="viewport" content="width=device-width, initial-scale=1.0" />
                <title>Document</title>
                <style>
                    * {
                        padding: 0;
                        margin: 0;
                    }
                    img {
                        width: 100%;
                    }
                </style>
            </head>
            <body>
                <img src="https://markdown-1253389072.cos.ap-nanjing.myqcloud.com/202203191544993.png" alt="" />
            </body>
        </html>`);
    }
})
server.listen(3000);
console.log("正在监听3000端口……")

 

标签:node,http,url,res,req,js,const,method
From: https://www.cnblogs.com/geol4/p/17930710.html

相关文章

  • css+js瀑布流布局实现
    记录一个瀑布流布局问题的解决过程最开始使用js实现,将子元素进行绝对定位,根据宽高及顺序判断定位的top与left。问题:存在新增子元素页面加载不及时的问题,会出现子元素初始状态叠加在一起,计算完成后才能正常显示。点击查看代码window.onload=()=>{/*传入waterfall与pic......
  • uni-app和Vue.js有什么区别?
    Hello,大家好,我是咕噜铁蛋!在当今的前端开发领域,uni-app和Vue.js都是非常热门的技术。很多开发者经常在选择时感到困惑。今天铁蛋这篇文章讲和大家探讨这两者的区别,帮助各位在开发路上做出明智的选择。1.uni-app是一个使用Vue.js开发所有前端应用的框架,支持一次编译多端运行。开发者......
  • 原生js和jquery判断单选复选框是否选中
    用jquery判断设置单选复选框时,有时会有些迷糊,今天总结下。<dl><dt>单选框</dt><dd><label><inputtype="radio"name="gender"value="男"/>男</label><label><inputtype="radio"name=......
  • Nextjs SyntaxError: Cannot use import statement outside a module错误
    NextJs报 SyntaxError:Cannotuseimportstatementoutsideamodule第三方依赖不能导入问题 解决方案:1,Next.JS13.1+,可以使用next.config.js中的属性transpilePackagesconstnextConfig={transpilePackages:['the-npm-package'],//第三方的依赖};module.expo......
  • Javascript 原型链 jQuery原型链 js原型链 我感觉我能一直写下去 扶着我>_<
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>原型链闭环</title><scriptsrc="./jquery.js"></script></head><body><divclass=&quo......
  • 贪吃蛇login.js代码
    // pages/login/login.jsPage({  /**   * 页面的初始数据   */  data: {    username:"",    password:"",  },  usernameinput(e){    this.setData({      username:e.detail.value    })  },  passwordinput(e){    this.setDat......
  • js-cookie js-cookie的使用
    js-cookie是什么?js-cookie是一个简单的,轻量级的处理cookies的jsAPI,用来处理cookie相关的插件js-cookie的使用方法一、先下载npminstall--savejs-cookie**二、引入安装好js-cookie插件后,在我们需要处理cookie的地方,简单的通过import引入就可以使用了importCookiesfrom'js-co......
  • node node-sass sass-loader版本对应问题(转)
    1.查看本地node版本node-v具体对应版本如下图:具体对应链接地址:node-sass2.查看项目中package中node-sass和sass-loader是否对应node版本3.不对应应修改成对应版本号以下是部分版本号对应,具体可百度sass-loader4.1.1,node-sass4.3.0sass-loader7.0.3,node-sass4.7.2......
  • nest.js中不同环境的配置读取
    node中不同环境的配置读取在node中最常用的是.env格式的配置文件,他有一个专门的npm包dotenv:我们来创建一个node项目试一下:进入这个目录,安装dotenv:npminstalldotenv然后新建一个.env配置文件:aaa=1bbb=2新建index.js并写入如下内容:require('dotenv').config({p......
  • js的this指向
    在JavaScript中,this是一个特殊的变量,它引用了调用对象。它的指向在不同的上下文中有不同的变化。以下是一些常见的this指向的情况:1.全局上下文:在全局作用域中,this指向全局对象。在浏览器中,这通常是window对象。console.log(this);//window(在浏览器中)2.函数调用:当......