浅谈Nodejs应用的主文件index.js的组成部分
前言
Node
妹子的问世,着实让我们前端攻城狮兴奋了一把,尤其本屌听说Javascript
可以写服务端后,兴奋的像是看到了二次元萝莉的胖子...(●'◡'●)。呃哼...YY先到这里,原谅本屌是个二次元萝莉控。
正文
想谈好对象,并不是要new
一个就行了,必须要先认识人家后慢慢的才可以上手,然后慢慢推上床<( ̄︶ ̄)>。
想想自己搞前端开发的时候,为了尽力让页面在浏览器君体内完美展现,也是做了不少功课,其中最不可少的就是要认识认识。这玩意是什么,能干什么。
对于寄宿在浏览器中的Javascript
就不多说了,之前发过一篇简单的文章《前端Javascript与Nodejs的异同》
,大概描述了下Nodejs
与前端javascript
的异同,如果你好好看的话肯定能明白的。
index.js
搭建一个Node
应用,少不了一个主文件,不少人根据各自喜好来定义名字,像app.js
、main.js
。
这里尊重npm init
时的默认配置为index.js
,其实个人还是挺喜欢app.js
这个命名的。
为了方便,本屌也使用了express
这个高大上的框架。
好!!!下面,我们来看看index.js
里应该有的内容。
//引用依赖模块
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// 视图引擎设置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
//中间件
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//路由
app.use('/', routes);
app.use('/users', users);
//遇到错误时的中间件
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
//抛出 提供给www.js 并通过www.js来开启服务
module.exports = app;
以上代码是通过express
脚手架生成的一个比较标准的内容,个人在里面做了简单的注释。然后我想说,请童鞋们不要急着看每一行代码是什么意思,因为如果你熟悉nodejs
不用看也知道写的什么,如果你不了解,也暂时不要去了解,我们看一本新书的时候,一定要先看一下它的目录才能大概知道书的内容。
现在我们来整理一下这个index.js
的大概目录,不难发现,它有几个重要的部分组成:
引入依赖模块
设置相关配置
定义中间件
定义路由
开启服务
几乎所有的入口文件都少不了这几个组成部分,而且顺序也是按照上面列表从上到下依次编写。这里需要说的是中间件这一部的编写,大部分中间件是写在路由之前,但是有些中间件应该在路由之后执行,比如处理错误的中间件,一般放在路由后面执行。
其实一个完整的入口文件并不是只有上面说的那么多,它还有一些可选项来构成完整的index.js
。为了方便比较,就直接列举出来吧:
引入依赖模块
设置相关配置
连接数据库(可选)
定义中间件
定义路由
开启服务
在多核系统上启动cluster多核处理模块(可选)
可以看出,添加了连接数据库和多核处理两个可选组成部分。
总结
一个完整的index.js
由7个部分组成,大家只要把主文件当成白雪公主,把7个组成部分当作七个小矮人就行了,哈哈,这个记法真天才。
不过话说回来,并不是每个应用都必须7个大将全上场,可能是5个,可能是6个,也可能是7个,大家在组织代码的时候根据应用和硬件需求来自定义构建即可。
浅谈Nodejs应用的主文件index.js的组成部分的更多相关文章
- 浅谈nodejs和php
现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序.早期网络发展,不同的技术被用于前端和后端开发.但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaSc ...
- 浅谈nodejs中HTTP模块应用
这里给大家分享下后端人员如果利用nodejs对数据的一些处理情况 适用于初学者使用 大牛勿喷 给大家分享下主要后端思想部分代码,前端部分就不展示了 const http = require(&quo ...
- 浅谈nodejs与npm
(1)npm介绍 在正式介绍Node.js学习之前,我们先认识一下npm. npm是什么东西?npm其实是Node.js的包管理工具(package manager). 为啥需要一个包管理工具呢?因为 ...
- 浅谈NodeJS多进程服务架构基本原理
阅读目录 一:nodejs进程进化及多进程架构原理 二:node中child_process模块实现多进程 三:父子进程间如何通信? 四:理解cluster集群 回到顶部 一:nodejs进程进化及多 ...
- 浅谈NodeJs的模块机制
J历史 我们都知道,js在刚被创建的时候,只是为了在网页上写一些小脚本而已,比如网页特效,表单验证等等,创立者也许没觉悟到以后的js会发展到如此规模.这是web1.0时代. 在web 2.0时代,各种 ...
- 60.浅谈nodejs中的Crypto模块
转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...
- 浅谈PHP中的数组和JS中的数组
最近在做前后端对接的时候,遇到一个问题,前端要求返回的数据格式是左边的,但是我通过json_encode返回到的数据格式是右边的 注意:数据格式从"[]"(数组)变成了&quo ...
- 【前端知识体系-NodeJS相关】浅谈NodeJS中间件
1. 中间件到底是个什么东西呢? [!NOTE] 中间件其是一个函数,在响应发送之前对请求进行一些操作 function middleware(req,res,next){ // 做该干的事 // 做 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
随机推荐
- WIN10:全选一个文件夹中的所有文件
- (转载)《Three easy pieces 》虚拟化部分整体介绍
转载自知乎:https://zhuanlan.zhihu.com/p/37917910 一个程序在运行的时候发生了什么呢? 其实只是一些非常简单的事情:运行指令.处理器从内存中取出指令,译码然后执行. ...
- Go代码规范梳理
Go代码规范(Code Review) 总结几个开发过程中经常会犯的代码规范错误 参考链接:https://learnku.com/go/wikis/48375 注释语句 // Request 表示运 ...
- LeetCode-071-简化路径
简化路径 题目描述:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径. 在 Unix 风格的文件系统中,一个点(. ...
- @PostConstruct使用注意点
前景提要:在一个项目中,由于数据库中敏感词删除掉了,但是在网页进行匹配时仍然能够匹配上已删除的词. 查看项目源码发现使用了@PostConstruct注解: 此注解的作用是:@PostConstruc ...
- laravel7 搜索关键字标红及手机号,身份证号隐藏
控制器代码 public function index(Request $request) { //接受搜索关键字 $word = $request->get('name'); $start = ...
- mysql5.7.35数据库迁移
最近开发使用的测试环境的服务器使用的一台惠普E7300CPU\4G内存\160G西数硬盘配置,数据量近达20G!虽然作为测试数据库但也算是重要角色,一旦出现将严重影响工作.计划迁移至另一台做有RAID ...
- Window7环境下安装Scrapy 方法
Window7环境下安装Scrapy Scrapy在CPython(默认Python实现)和PyPy(从PyPy 5.9开始)下运行Python 2.7和Python 3.4或更高版本. 如果您使用的 ...
- 《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)
1.简介 上一篇讲解了依赖测试的各种方法,今天继续讲解依赖测试的方法,这一篇主要是讲解和分享通过xml文件配置组名依赖方法( 主要是测试组的用法).废话不说,直接上干货. 2.实例 测试组:一个组可包 ...
- springcloud报错-------关于 hystrix 的异常 FallbackDefinitionException:fallback method wasn't found
典型如下 第一种import java.util.List;@RestController@RequestMapping("/order")@DefaultProperties(d ...