让nodejs开启服务更简单--express篇
const express = require('express')
const app = express()
app.post('/home', (req, res, next)=>{
res.end('hello express')
})
app.listen('8000', ()=>{})

const express = require('express')
const app = express()
app.use('/', (req, res, next)=>{
console.log('匹配到了use中间件')
next()
})
app.post('/home', (req, res, next)=>{
console.log('匹配到了post中间件')
res.end('hello express')
})
app.listen('8000', ()=>{
console.log('开启8000端口')
})

app.get('/goods/:id', (req, res, next)=>{
console.log(req.url)
console.log(req.params)
res.end('params')
})
app.get('/login', (req, res, next)=>{
console.log(req.url)
console.log(req.query)
res.end('query')
})

// 获取 json格式的请求参数
app.use(express.json());
// 获取 urlencoded 格式的请求参数
app.use(express.urlencoded({extended: true}));
// 在下一个匹配的post请求里通过 req.body 来获取, 有兼容性问题, 需要express4.16以上 app.post('/login', (req, res, next) => {
console.log(req.body);
res.end("login success");
});

const express = require('express')
const multer = require('multer')
const app = express()
const upload = multer()
// 传递非文件类型时, 使用upload.any(),传递文件类型时 upload.array("file")
app.use('/login', upload.array("file"), (req, res, next)=>{
console.log(req.files)
console.log(req.body)
res.end('form-data')
})
app.listen(8000, () => {
console.log('开启8000端口')
});


app.get('/login', (req, res, next) => {
console.log(req.query);
// 设置响应码
res.status(200);
// 设置响应类型
res.type("application/json");
res.end(JSON.stringify({name: "kiki", age: 16}));
// 以上两行可以合并成 res.json({name: "kiki", age: 16});
});
再来看看express稍微复杂一点的用法,当我们通过express提供的接口是 restful类型的时候,同样一个路由地址,可能对应着多种请求方式,如get/post/put/delete。
const express = require('express')
const router = express.Router()
router.get('/', (req, res, next)=>{
res.json([{
name: 'alice', age: 17
},{
name: 'lili', age: 16
}])
})
router.get('/:id', (req, res, next)=>{
res.json({ name: 'alice', age: 17 })
})
router.post('/', (req, res, next)=>{
res.json('post')
})
router.put('/', (req, res, next)=>{
res.json('put')
})
router.delete('/', (req, res, next)=>{
res.json('delete')
})
module.exports = router;
以上为定义的user文件,可以看到以上的路由是不包含/user这个通用的路由的,因为它被定义在了主入口处,主入口文件引入以上的js文件,将导入的router作为中间件传入到use方法中,这样就可以用四种不同的方式调用同一个接口。
const express = require('express')
const userRouter = require('./routers/user')
const app = express()
app.use('/user', userRouter)
app.listen(8000, ()=>{})

const express = require('express')
const app = express()
const NOT_FIND = 'NOT_FIND'
const TIME_OUT = 'TIME_OUT'
app.get('/login', (req, res, next)=>{
next(new Error(NOT_FIND))
})
app.get('/home', (req, ers, next)=>[
next(new Error(TIME_OUT))
])
app.use((error, req, res, next)=>{
console.log('>>>>>>>>>error', error)
let code = 400;
let message = ''
switch(error.message){
case NOT_FIND:
message = '您的信息有误'
break;
case TIME_OUT:
message = '已超时';
break;
default:
break;
}
res.json({
code,
message
})
})
app.listen(8000, ()=>{})

让nodejs开启服务更简单--express篇的更多相关文章
- hydra nodejs 微服务框架简单试用
hydra 是一个以来redis 的nodejs 微服务框架 安装 需要redis,使用docker 进行运行 redis docker run -d -p 6379:6379 redis 安装yo ...
- [翻译]Kafka Streams简介: 让流处理变得更简单
Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...
- Kafka Streams简介: 让流处理变得更简单
Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...
- spring 第一篇(1-1):让java开发变得更简单(下)
切面(aspects)应用 DI能够让你的软件组件间保持松耦合,而面向切面编程(AOP)能够让你捕获到在整个应用中可重用的组件功能.在软件系统中,AOP通常被定义为提升关注点分离的一个技术.系统由很多 ...
- spring 第一篇(1-1):让java开发变得更简单(下)转
spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...
- nodejs学习--express篇
express篇:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 提供了内置的中间件 express.static ...
- 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。
微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...
- Anno 让微服务、混合编程更简单(Net love Java)
在社区或者QQ群我们经常看到有人争辩编程语言的好坏,只要一提起这个话题常常就能引来很多人参与,往往最后就变成了一群人几个小时的骂战.今天我们要说的是如何让Java和.Net(甚至更多语言)相结合.充分 ...
- 让服务调用更简单 - Caller.HttpClient
前言 绝大多数项目都离不开服务调用,服务的调用方式通常是基于Http.RPC协议的调用,需要获取到对应服务的域名或者ip地址以及详细的控制器方法后才能进行调用,如果项目需要支持分布式部署,则需要借助服 ...
- 分布式系统的消息&服务模式简单总结
分布式系统的消息&服务模式简单总结 在一个分布式系统中,有各种消息的处理,有各种服务模式,有同步异步,有高并发问题甚至应对高并发问题的Actor编程模型,本文尝试对这些问题做一个简单思考和总结 ...
随机推荐
- office办公套件基础教程
正文 1.网页端的应用-office全家桶 这里我选择先聊web端的应用,首先,我们来想象一下,只要你有网络,有浏览器,就能打开一个网页,在网页上进行编辑.处理一些word.报表.ppt等,你不需要复 ...
- 【Azure 存储服务】使用 AppendBlobClient 对象实现对Blob进行追加内容操作
问题描述 在Azure Blob的官方示例中,都是对文件进行上传到Blob操作,没有实现对已创建的Blob进行追加的操作.如果想要实现对一个文件的多次追加操作,每一次写入的时候,只传入新的内容? 问题 ...
- 2021-05-21:给定一个数组arr,先递减然后递增,返回arr中有多少个绝对值不同的数字?
2021-05-21:给定一个数组arr,先递减然后递增,返回arr中有多少个绝对值不同的数字? 福大大 答案2021-05-21: 双指针.左指针最左,符合条件时右移:右指针最右,符合条件时左移.左 ...
- vue3+vite2+element-plus+ts搭建一个项目
花了几天用 vue3+ vite2+ element-plus+ ts 搭了个 极简版骨架型数据管理系统,使用静态数据模拟动态路由,路由拦截,登录页面鉴权等,使用了iconify字体图标,整合了ces ...
- Java的先行发生原则
先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则.依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定 ...
- 10个 Istio 流量管理 最常用的例子,你知道几个?
10 个 Istio 流量管理 最常用的例子,强烈建议收藏起来,以备不时之需. 为了方便理解,以Istio官方提供的Bookinfo应用示例为例,引出 Istio 流量管理的常用例子. Bookinf ...
- Flash Download failed -“Cortex-M3”
STM32下载程序时经常出现如下问题,即 error:Flash Download failed -"Cortex-M3" 经查找网络攻略,总结如下: (1). (2). ( ...
- 推送服务接入指导(HarmonyOS篇)
消息推送作为App运营日常使用的用户促活和召回手段,是与用户建立持续互动和连接的良好方式.推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道,本文旨在介绍Harmo ...
- MultiscaleResNet50:AnEfficientandAccurateApproachforIma
目录 标题:<51. Multi-scale ResNet-50: An Efficient and Accurate Approach for Image Recognition> 背景 ...
- 从零开始整SpringBoot-搭建一个企业级项目
创建Springboot项目 在企业里的项目多数是分Modules的,更多是通过物理方式隔离层之间的职责. 首先按照原有新建SpringBoot项目创建,填好相关信息后,选择Java 8其他不用选. ...