最近正在学习搭建一个nodejs服务器来执行脚本,通过执行脚本,进行业务上的一些简易配置。

一.环境搭建

网上查看后有好几种实现方式,这里我使用的是express来搭建服务器。
1.首先,我安装了淘宝镜像,
npm install cnpm -g –registry=https://registry.npm.taobao.org
2.全局安装express命令安装工具。
cnpm install -g express-generator
3.安装express框架
cnpm install -g express
4.新建项目:express myStudy -e
5.下载组件依赖:cnpm install
6.启动项目:npm start
至此,基本的项目环境已经搭建好了。

1.了解环境目录

1.bin:用于应用启动,可在里面设置启动的端口号等。
2.public:里面用来存放静态资源目录。
3.routes:相当于后台的controller(控制器),路由。
4.views:jade模板目录,可以认为是view(视图)目录。
5.app.js:程序main入口文件。
6.package.json:工程配置的一些依赖,通过install安装下载依赖。

二.Express使用技巧

1.路由控制

express通过请求的控制器名称来配对相应controller,在做相应的request和response处理等操作。

a.get方法使用

第一个参数path为请求路径,第二个参数为处理请求的回调函数
app.get(path, function(req, res))

get方法使用:

//跳转到views下的index.ejs视图
router.get('/', function(req, res, next) {res.render('index', { title: '陈厚伯' });
});
//匹配htp://localhost:3000/hello做相关req,res的操作
router.get('/hello',function(req,res){res.end('hello');
});

b. post方法使用

第一个参数path为请求路径,第二个参数为处理请求的回调函数和get一样
app.post(path,function(req,res))

post方法使用:

//匹配htp://localhost:3000/hello做相关req,res的操作
router.post('/hello', function (req,res) {res.end('hello');
});
//匹配所有,主要用作not found
router.post('*', function (req,res) {res.end('post没找到');
});

c. all方法使用

监听所有的请求方法,可以匹配所有的HTTP动词。根据请求路径来处理客户端发出的所有请求,参数同上
app.all(path,function(req, res))

all方法使用:

const express = require('express');
const app = express();
app.all('/world',function(req,res){res.end('all world');
});
app.listen(3000);

d. Express Router的设计

在router路由容器中存放一层层route实例,并且每层route实例中存放一层层callback,当匹配上一个route的时候,执行它里面的callback

router.get('/user',function(req,res,next){console.log(1);next();
},function(req,res,next){console.log(11);next();
}).get('/world',function(req,res,next){console.log(2);next();
}).get('/hello',function(req,res,next){console.log(3);res.end('ok');
});

2.中间件

说明
中间件就是处理HTTP请求的函数,用来完成不同的业务需求,如检查用户是否登录、检测用户是否有权限访问等。

特点

  1. 一个中间件处理完请求和响应可以把相应数据再传递给下一个中间件
  2. 回调函数的next参数,表示接受其他中间件的调用,函数体中的next(),表示将请求数据继续传递
  3. 可以根据路径来区分返回执行不同的中间件

使用

主要通过use方法

var express = require('express');
var app = express();
app.use(function (req,res,next) {console.log('全部匹配');next();
});
app.use('/water', function (req,res,next) {console.log('只匹配/water');next();
});
app.get('/water', function (req,res) {res.end('water');
});
app.listen(3000);

中间件原理:
通过Application原型上的use方法,将Router变函数,抽象出Router方法复用,可以用app下面的use方法调取中间件,也可以创建一个express.router,在通过app下面use调用这个中间件,形成一个父子级别的中间件路由,下面user.use就是当访问/user/或者/user/2的子路由

const express = require('../');
const app = express();
app.use(function(req,res,next){console.log('Ware1:',Date.now());next('wrong');
});
app.get('/',function(req,res,next){res.end('1');
});
const user = express.Router();
user.use(function(req,res,next){console.log('Ware2',Date.now());next();
});
user.use('/2',function(req,res,next){res.end('2');
});
app.use('/user',user);
app.use(function(err,req,res,next){res.end('catch '+err);
});
app.listen(3000,function(){console.log('server started at port 3000');
});

3.静态服务文件

如果要在网页中加载静态文件(css、js、img),就需要另外指定一个存放静态文件的目录,当浏览器发出非HTML文件请求时,服务器端就会到这个目录下去寻找相关文件

var express = require('express');
var app = express();
var path = require('path');
app.use(express.static(path.join(__dirname,'public')));

static属于express内置中间件,其中原理主要是调用了serve-static库,具体实现是原生node.js API,可以查看我写的一篇如何搭建静态服务器 static-server

4. 模板解析

这里主要说的是ejs模板,具体API文档可以查看 EJS官网

1.安装ejs
$ npm install ejs
2.设置模板
var express = require('express');
var path = require('path');
var app = express();
app.set('view engine','ejs');
app.set('views',path.join(__dirname,'views'));
3.渲染html
app.set('view engine','html'); app.set('views',path.join(__dirname,'views')); app.engine('html',require('ejs').__express);
4.渲染视图
//参数一,要渲染的模板,
//参数二,渲染模板所需要数据
app.get('/', function (req,res) {
res.render('hello',{title:'hello'},function(err,data){});
});
5.模板的实现

res.render = function (name, data) {var viewEngine = engine.viewEngineList[engine.viewType];if (viewEngine) {viewEngine(path.join(engine.viewsPath, name + '.' + engine.viewType), data, function (err, data) {if (err) {res.status(500).sendHeader().send('view engine failure' + err);} else {res.status(200).contentType('text/html').sendHeader().send(data);}});} else {res.status(500).sendHeader().send('view engine failure');}
}
``

搭建nodejs+express服务器相关推荐

  1. Mac搭建Nodejs+Express

    2019独角兽企业重金招聘Python工程师标准>>> 1.从官网下载并解压 //http://nodejs.org/dist/v0.12.4/node-v0.12.4-darwin ...

  2. 关于使用NodeJS+Express搭建服务器访问静态资源的一些填坑经验

    前言 NodeJs是一个能让前端开发工程师变成全栈工程师的神器.最近在搞一个私活,需要上传图片到服务器存储.按照以前的想法,是用Java写代码搭服务器.奈何,大学毕业后就一直在搞前端和安卓开发.Jav ...

  3. nodejs+express搭建小程序后台服务器

    本文使用node.js和express来为小程序搭建服务器.node.js简单说是运行在服务端的javascript:而express是node.js的一个Web应用框架,使用express可以非常简 ...

  4. TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(一)

    最近看到TWaver 的html5版本即将发布了,于是今天用TWaver HTML5 + NodeJS + express + websocket.io + redis搭建了一个简单原型.先发出几张效 ...

  5. [译] Node.js, Express.js 搭建 HTTP/2 服务器

    原文:Easy HTTP/2 Server with Node.js and Express.js 作者:Azat Mardan 代码:http2-express 什么是 HTTP/2 现代互联网的 ...

  6. 搭建Nodejs环境 创建Express应用

    1. Nodejs Nodejs是一种服务器端js脚本运行环境: Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎 2. Express开发框架 极简的web框架,完全是由路 ...

  7. nodeJS+express+mysql模块封装之服务器渲染小demo

    nodeJS+express+mysql模块封装之服务器渲染小demo 创建一个小项目 npm init 下载相关中间件(根据package.js来下载) package.js 目录结构 index. ...

  8. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  9. nodejs ajax进度条,Ajax异步文件上传与NodeJS express服务端处理的示例分析

    Ajax异步文件上传与NodeJS express服务端处理的示例分析 发布时间:2021-07-24 11:17:21 来源:亿速云 阅读:79 作者:小新 这篇文章主要介绍Ajax异步文件上传与N ...

最新文章

  1. Android layout布局属性、标签属性总结大全
  2. 理想的教育是从父母自我改变开始
  3. 详解 WSUS 部署
  4. boost::type_erasure::tuple相关的测试程序
  5. 【搜索引擎基础知识1】搜索引擎基本架构
  6. Linux centosVMware xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
  7. utilities(C/C++)
  8. 如果查看oracle_home是否共享_现在还有小伙伴用XP系统吗?经常会共享打印问题...
  9. html5 动态图表FineReport优化报表取数
  10. ORACLE 9 默认密码
  11. 2022年蓝桥杯基础题目合集C语言
  12. Xilinx_Vivado_2019.1下载和安装教程
  13. Windows:无须再忍,Microsoft Store下载慢/加速/更快,不摘抄(2022新)
  14. linux 内核移植和根文件系统的制作
  15. 怎么将视频转换成mp4?
  16. 富途牛牛A股数据API使用基础教程
  17. oracle 执行计划中出现 merge join cartesian
  18. Uber Go 语言编程规范:使用 go.uber.org/atomic
  19. 经典编程题——折纸问题
  20. python求解四阶微分方程_用Python求解二阶常微分方程组的RungeKutta四阶解

热门文章

  1. android 下划线edittext,Android实现EditText添加下划线
  2. 算法的数值稳定性实验报告用c语言,数值计算实验教案.doc
  3. 腾讯的核心竞争力是什么
  4. 计算机专业就业方向湖北,湖北成考计算机类专业就业前景怎么样?
  5. 如何设置STM32 IO端口输入输出
  6. 体系设计建模软件系统
  7. codeblocks配置glut
  8. 一流管理者,都不会选“先做再说”
  9. spool导出格式的问题
  10. omv检查硬盘坏道_用MHDD检测到硬盘出现X坏道时最佳的解决方法!