2023-05-14 ·
日常教程 ·
173367
最简单的服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
const express = require ('express' );var app = express();//返回html格式 app.get('/' ,(req,res)=>{ res.send('<h2>Hello world</h2>' ); }); //返回json格式 app.get('/fast' ,(req,res)=>{ res.send({ name:'json' , likes:[ 'reading' , 'coding' ] }); }); //监听端口 app.listen(3000 );
访问: localhost:3000 localhost:3000/fast
访问静态文件
创建public/help.html
1 2 3 4 5 6 7 8 9 10
<!DOCTYPE html> <html lang ="en" dir ="ltr" > <head > <meta charset ="utf-8" > <title > </title > </head > <body > <h2 > Hello Jonson</h2 > </body > </html >
express.js:
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
const express = require ('express' );var app = express();// 参数是一个middleware app.use(express.static(__dirname +'/public' )); //返回html格式 app.get('/' ,(req,res)=>{ res.send('<h2>Hello world</h2>' ); }); //返回json格式 app.get('/fast' ,(req,res)=>{ res.send({ name:'json' , likes:[ 'reading' , 'coding' ] }); }); //监听端口, 第二个回调是开启服务器后调用 app.listen(3000 ,()=>{ console .log('hello jonson' ); });
访问: http://localhost:3000/help.html 会打开public/help.html的页面并显示出来。
动态注入 express template engines
新建views/about.hbs:
1 2 3 4 5 6 7 8 9 10 11
<!DOCTYPE html> <html dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <h2>{{currentYear}}</h2> <footer>{{pageTitle}}</footer> </body> </html>
express.js:
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
const express = require ('express' );const hbs = require ('hbs' );var app = express();app.set('view engine' ,'hbs' ); // 参数是一个middleware app.use(express.static(__dirname +'/public' )); //返回html格式 app.get('/' ,(req,res)=>{ res.send('<h2>Hello world</h2>' ); }); //返回json格式 app.get('/fast' ,(req,res)=>{ res.send({ name:'json' , likes:[ 'reading' , 'coding' ] }); }); //动态传递参数。 app.get('/about' ,(req,res)=>{ res.render('about.hbs' ,{ pageTitle:'About Page' , currentYear:new Date ().getFullYear() }); }); //监听端口, 第二个回调是开启服务器后调用 app.listen(3000 ,()=>{ console .log('hello jonson' ); });
访问: localhost/about
模版封装
新建:views/partial/footer.hbs:
1 2 3
<Header> <footer>{{pageTitle}}</footer> <Header>
view/abut.hbs:
1 2 3 4 5 6 7 8 9 10 11
<!DOCTYPE html> <html lang ="en" dir ="ltr" > <head > <meta charset ="utf-8" > <title > </title > </head > <body > <h2 > {{currentYear}}</h2 > {{> footer}} </body > </html >
express.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
const express = require ('express' );const hbs = require ('hbs' );var app = express();hbs.registerPartials(__dirname + '/views/partials' ); app.set('view engine' ,'hbs' ); // 参数是一个middleware app.use(express.static(__dirname +'/public' )); //返回json格式 app.get('/about' ,(req,res)=>{ res.render('about.hbs' ,{ pageTitle:'About Page' , currentYear:new Date ().getFullYear() }); }); //监听端口, 第二个回调是开启服务器后调用 app.listen(3000 ,()=>{ console .log('hello jonson' ); });
访问: localhost/about
express middleware
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
const express = require ('express' );const hbs = require ('hbs' );const fs = require ('fs' );var app = express();hbs.registerPartials(__dirname + '/views/partials' ); app.set('view engine' ,'hbs' ); // 参数是一个middleware app.use(express.static(__dirname +'/public' )); //返回html格式 app.get('/' ,(req,res)=>{ res.send('<h2>Hello world</h2>' ); }); //自定义middleware app.use((req,res,next )=> { var now = new Date ().toString(); var log = `${now} :${req.method} ${req.url} ` ; console .log(log); fs.appendFile('server.log' ,log+'\n' ,(err)=>{}); next(); }); //返回json格式 app.get('/fast' ,(req,res)=>{ res.send({ name:'json' , likes:[ 'reading' , 'coding' ] }); }); //返回文件,about.hbs在views文件夹下 app.get('/about' ,(req,res)=>{ res.render('about.hbs' ,{ pageTitle:'About Page' , currentYear:new Date ().getFullYear() }); }); //监听端口, 第二个回调是开启服务器后调用 app.listen(3000 ,()=>{ console .log('hello jonson' ); });
本文链接: https://dreamerjonson.com/2018/11/15/node-15-express/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
Plotly是Python中制作交互式图表的首选工具,支持缩放、悬停、拖拽等交互功能,三步即可创建图表:准备数据、调用px.line等函数、用fig.show()显示或write_html导出;支持动画、实时刷新与用户交互驱动更新;可定制悬停信息、适配移动端并保障离线使用。 用Plotly快速创建可...
接口幂等性设计的核心是确保同一请求多次调用结果与一次调用完全一致,需针对写操作、有副作用的查询及回调类接口实施,常用方案包括唯一业务ID、Token机制、状态机+条件更新和数据库唯一约束兜底。 接口幂等性设计的核心,是确保同一请求无论调用多少次,产生的业务结果都与调用一次完全一致。重复请求在分布式系...
Python接口数据校验核心是精准拦截非法输入,用Pydantic定义请求模型实现类型与业务规则校验,分层处理参数级、业务级和外部依赖级验证,并统一返回前端友好的错误结构。 Python接口数据校验的核心,是提前拦截非法、缺失或格式错误的输入,避免后续逻辑因脏数据崩溃或产生错误结果。关键不在于“全量...
应根据实际需求选择:ini适合分节、带注释的简单配置(如数据库连接),用configparser读取;json适合嵌套复杂、跨语言共享的配置(如API参数),用json模块加载。 Python读取配置文件,ini和json是最常用的两种格式。选哪种不取决于“哪个更好”,而要看实际需求:ini更适合分...
Django进阶开发核心在于分层清晰的项目结构、健壮的数据建模、安全的用户交互与生产就绪实践。需按功能域拆分应用,封装业务逻辑至services,分离环境配置;模型承载业务规则,优化查询并加密敏感字段;权限分三层控制,表单前后端验证一致;日志分级、缓存防雪崩、Celery异步解耦、静态资源走CDN。...
这篇文章将为大家详细讲解有关nodejs如何检测文件是否存在,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 检测方法:1、使用“fs.exists(path,callback)”;2、使用“awaitutil.promisify(fs.stat)('文件...
2023-06-26 · 日常教程 · 31834
手机端与网页通讯,使用websocket完成二者之间的联通。websocket选用socket.io类实现。服务器端,使用nodejs,代码依赖了express和socket.io。首先建立一个http服务器varapp=require('express')();varserver=require(...
2023-06-26 · 日常教程 · 225529
本篇内容主要讲解“区块链技术理念与工作流程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“区块链技术理念与工作流程是什么”吧!区块链的技术理念是什么?通过区块链的概念我们知道,区块链在本质上来说就是一种记账方法,当然它并不是通过人来记账的,而是通过一...
2023-06-26 · 日常教程 · 131618