nodemon热加载,npm,MVC(第四天)

一、nodemon热加载

不管是node.js原生开发,还是借助express,kora等框架开发node.js的情况下,在对代码做出更新后,都是需要重启已生效我们的文件的。为项目添加热加载(nodemon),可以避免一次次手动的重启浪费精力。

nodemon是一个node.js的辅助开发工具,具有监听目录文件的作用。并在监听后作出响应。

nodemon用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。

nodemon将监视启动目录中的文件,如果有任何文件更改,nodemon将自动重新启动node应用程序。

nodemon不需要对代码或开发方式进行任何更改。 nodemon只是简单的包装你的node应用程序,并监控任何已经改变的文件。nodemon只是node的替换包,只是在运行脚本时将其替换命令行上的node。

安装:

npm install nodemon  //安装到本地
npm install -g nodemon //安装到全局
npm install -s nodemon  //安装到项目依赖

使用:安装好以后了,我们将已经启动的node.js项目关闭,然后通过nodemon命令重启。

nodemon index.js

自动重新运行:

最初编写nodemon是为了重新启动诸如web服务器之类的挂起进程,但是现在它支持干净地退出的应用程序。如果您的脚本干净地退出,nodemon将继续监视该目录(或多个目录),如果有任何更改,则重新启动脚本。

手动重新启动:

当nodemon正在运行时,如果您需要手动重新启动您的应用程序,而不是停止并重新启动nodemon,您可以输入带有回车的rs,并且nodemon将重新启动您的进程。

二、NPM

1、NPM使用介绍

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。

  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

$ npm -v
2.3.0

如果安装的是旧版本的 npm,可以通过 npm 命令来升级,命令如下:

npm install npm -g

 2、使用NPM安装模块

npm 安装 Node.js 模块语法格式如下:

npm install <Module Name>

以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express:

 npm install express

安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。

var express = require('express');

3、安装方式

本地安装(local):

1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。

2. 可以通过 require() 来引入本地安装的包。

 npm install <Module Name>

全局安装(global):

1. 将安装包放在 /usr/local 下或者你 node 的安装目录。

2. 可以直接在命令行里使用。

npm install <Module Name> -g  

安装到项目依赖:会把依赖包名称添加到 package.json 文件 dependencies 键下。

npm istall <Module Name> --save

4、NPM常用指令

查看所有全局安装的模块:

npm list -g

查看某个模块的版本号:

npm list grunt

卸载 Node.js 模块:

npm uninstall express

卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:

npm ls

更新模块(更新到最新版本):

npm update <Module Name>

搜索模块:

 npm search <Module Name>

创建模块:创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。每一个项目创建时 ,先创建一个package.json文件它代表了这个项目的一些结构和配置信息(项目的清单)。

npm init-y

//Package.json 属性说明

    name - 包名。

    version - 包的版本号。

    description - 包的描述。

    homepage - 包的官网 url 。

    author - 包的作者姓名。

    contributors - 包的其他贡献者姓名。

    dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

    repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

    main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。

    keywords - 关键字

在 npm 资源库中注册用户(使用邮箱注册):

npm adduser

发布模块:

npm publish

三、自定义模块

方法一:

exports.属性名 = 值/变量;

注意:可以导出多个exports.属性名 = 值/变量;

主模块/ 引入模块.js

  const  myModule = require("./自定义模块.js");  
   

自定义模块.js

  // 自定义模块
    // =========1.变量============
    let username = "Jack";
    let userInfo = {age:10, grade:"H5"};
     
    // 导出/ 暴露内容
    exports.username = username;
    exports.userObj = userInfo;
     
    //直接赋值
    // =========2.变量============
    exports.userage = 18;
     
    // =========3.方法============
    exports.getInfo = function () {
        console.log(userInfo,username);
    }
     
    //另一个方法表示
     
    module.exports.address = "北京";
    //module.exports 等同于exports
    console.log(module.exports === exports);//输出true

方法二:

module.exports = 对象;

moudule.exports = 类/构造函数/函数;

注意:写多个module.exports = 对象,会覆盖上一个,修改其的值;

导出的类/构造函数必须通过new 下进行导出,对象不能new;

实例:

自定义模块2-2.js

    //自定义模块2
     
    module.exports = {
        user:"丽丽",
        tag: 100
    }
     
     
    //方法
    //此时user和tag输出的为undefined,因为这个exports方法会直接覆盖上面的exports
    module.exports = function () {
        console.log("自定义模块2");//主模块调用:myModule2()或new myModule2()
    }
     
    // 导出===类(构造函数)
    module.exports = class UserName{
        // console.log("我是个类/构造函数");//导进的模块必须通过new 下进行导出,对象不能new
    }
     
     
    //这样不能进行导出,相当于又声明了一个exports,exports添加属性和方法是可以进行导出,修改属性或者方法就不能进行导出
    // exports = {
    //     a:100
    // }

主模块.js   

// 自定义模块2
    console.log("=============自定义模块2===============");
    const  myModule2 = require("./自定义模块2-2.js");
    // console.log(myModule2);
    console.log(myModule2.user);
    console.log(myModule2.tag);
     
    // myModule2();//还可以new myModule2()表示
    new myModule2();

四、MVC

  MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:
        模型(Model)、视图(View)和控制器(Controller)。
    MVC模式最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。
    MVC可对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便。而且MVC也使程序简化,更加直观。

  •      视图View:界面设计人员进行图形界面设计;
  •     *控制器Controller:对请求进行处理,负责请求转发;
  •     *模型Model:程序编写程序应用的功能(实现算法等等)、数据库管理;

在MVC模式中,Web用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。

实例:

1.在项目中引入router文件夹

2.创建后端入口文件 和 前端src静态资源文件

3.端入口文件的配置和使用:

//入门文件
var http=require("http")
var router=require("./router/router.js")
http.createServer((req,res)=>{
	router(req,res)
	
}).listen(81)
router.use("/mydata",router.route.say)
router.use("/mydata2",router.route.mydata2)

//route文件
module.exports = {
	say(req,res){
		console.log(req.query)
		var arr=[{title:"xxxx1",price:188},
		{title:"xxxx2",price:188},
		{title:"xxxx3",price:188},
		{title:"xxxx4",price:188},
		{title:"xxxx5",price:188}]
		res.json(arr)
	},
	mydata2(req,res){
		console.log(req.query)
		res.json({msg:"我是第二个接口的数据"})
	}
	
}
router文件
var url = require("url")
var route=require("./route.js") 
var querystring=require("querystring")
var fs=require("fs")
module.exports = function(req, res) {
	console.log(req.url)
	var pathname = url.parse(req.url).pathname.substr(1)
	req.query=querystring.parse(url.parse(req.url).query)
	res.json=(arg)=>{res.end(JSON.stringify(arg))}//把传入的对象转化为json数据 再传给前端
	if(module.exports.route[pathname]){
		//数据接口的路由
	   module.exports.route[pathname](req, res)
		
	}else{
		//静态资源的托管
		fs.readFile(__dirname+"../src",(err,data)=>{
			res.end(data)
		})
	}
	
}
module.exports.route = {...route}
module.exports.use = function(pathname, callback) {
	module.exports.route[pathname.substr(1)] = callback
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值