1.静态资源访问,需要设置路由和响应标头

2.url模块、path模块、querystring模块

     Url {
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '?id=10021',
query: 'id=10021',
pathname: '/a.html',
path: '/a.html?id=10021',
href: '/a.html?id=10021' }
  • url.parse(,true).query 可以以对象形式输出查询参数
  • path.parse 可以获得拓展名
  • querystring 将查询参数字符串转成对象形式

MIME

是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开

{
".html": "text/html" ,
".png": "image/png",
".jpeg": "image/jpeg" ,
".jpg": "image/jpeg",
".json": "application/json",
".ico": "image/x-icon" ,
".svg": "image/svg+xml",
".mp4": "video/mp4" ,
".mp3":"audio/mpeg",
".avi": "video/x-msvideo",
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".doc": "application/msword",
".xls": "application/vnd.ms-excel" ,
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
".css": "text/css" ,
".js": "application/x-javascript"
}

3.根据拓展名匹配对应类型的标头

var pathname=url.parse(req.url).pathname

var extname=path.extname(pathname)

if(mine_json.hasOwnProperty(extname))
{
res.setHeader("content-type",mime[extname])
}
  • 重定向
  res.writeHead(302,{"Location":pathname+"/index.html"})

4.serve-static资源静态化

npm install serve-static

npm install finalhandler

var finalhandler = require('finalhandler')
var http = require('http')
var serveStatic = require('serve-static') var serve = serveStatic('public', { 'index': ['index.html', 'index.htm'] }) var server = http.createServer(function onRequest(req, res) {
serve(req, res, finalhandler(req, res))
}) server.listen(3000)

5.formidable实现对get和set的封装或者文件上传等

6.app.use和请求方式无关

app.use("/use/:id".function(req,res,next){
console.log("中间件");
res.send("OK")
})
app.get("/use/:id".function(req,res,next){
console.log("中间件");
res.send("OK")
})

7.应用层中间件感觉和路由中间件差不多,路由中间件最后还要绑定到应用层中间件,但是当路由多了以后,再把路由写在一个app里面就不合适了,使用用路由中间件拓展性更好。

8.错误处理中间件

app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})

9.rjs模板引擎的使用


var express = require("express")
var fs = require("fs")
var path = require("path")
var app = express() //设置默认的模板引擎
app.set("view engine", "ejs") app.get("/", function (req, res, next) { res.render("deptinfo", {
"deptname": "IT",
"deptno": "001",
"emps": [
{ "name": "TOM", "age": 30 },
{ "name": "JACK", "age": 35 },
{ "name": "ROSE", "age": 20 },
]
})
}) //静态资源处理
// app.use('/static', express.static('public'))
app.use('/static', express.static(path.join(__dirname, 'public')))
app.use(express.static('uploads')) app.listen(3000, () => {
console.log("服务已启动。port:3000")
})

node初体验(二)的更多相关文章

  1. 【原创】Jquery初体验二

    快速导航 一.传统方式生成Table 二.使用jquery.tmpl插件快速生成Table 三.Jquery中的操作class的几个方法 四:jq里面的克隆 五:属性过滤器 六:表单元素过滤器 一.传 ...

  2. Ruby on rails初体验(二)

    体验一中添加了一个最基本的支架和一个简单的数据迁移,实现了一个基本的增删改查的功能列表.体验二中要在次功能上继续丰满一下功能.实现如下效果: 在每个公司中都包含有不同的部门,按照体验一中的方法,添加一 ...

  3. Spring Cloud Alibaba 初体验(二) Nacos 服务注册与发现 + 集成 Spring Cloud Gateway

    一.服务注册 添加依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...

  4. node初体验(一)

    1.node.js是一个构建在chrome V8引擎上的javascript运行环境 2.node.js特点:单线程.事件驱动.非阻塞IO模型.轻量 3.node.js是单线程的(多个请求都是一个线程 ...

  5. jquery.fn.extend与jquery.extend--(初体验二)

    1.jquery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jquery.fn.extend(object);给jQuery对象添加方法. $.extend({ a ...

  6. JSON初体验(二):Gson解析

    今天,我们来介绍一下Gson的jar包的用法. JSON解析之Gson 特点:编码简介,谷歌官方推荐 数据之间的转换: 1.将json格式的字符串{}转换成为java对象 API: <T> ...

  7. node.js + express 初体验【hello world】

    [node.js]  一个神奇的XX 呵呵 :) 不知道怎么形容他才好! [express] 是node.js 开发web应用程序的框架 开发环境:XP 大家共同进步吧 :) 一:前期准备: 1:下载 ...

  8. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  9. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

随机推荐

  1. Spark-读写HBase,SparkStreaming操作,Spark的HBase相关操作

    Spark-读写HBase,SparkStreaming操作,Spark的HBase相关操作 1.sparkstreaming实时写入Hbase(saveAsNewAPIHadoopDataset方法 ...

  2. Native vlan

    1.本征 VLAN即Native Vlan Native Vlan和其他Vlan的另外一个区别在于:非Native Vlan在trunk中传输数据时要被添加Vlan标记的(如dot1q或者isl),但 ...

  3. 我用了半年的时间,把python学到了能出书的程度

    Python难学吗?不难,我边做项目边学,过了半年就通过了出版社编辑的面试,接到了一本Python选题,并成功出版. 有同学会说,你有编程基础外带项目实践机会,所以学得快.这话不假,我之前的基础确实加 ...

  4. Effective Java读书笔记--类和接口

    1.使类和成员的可访问性最小化不指定访问级别,就是包私有.protected = 包私有 + 子类一般private不会被访问到,如果实现了Serializable,可能会泄露.反射.final集合或 ...

  5. Flink-v1.12官方网站翻译-P015-Glossary

    术语表 Flink Application Cluster Flink应用集群是一个专用的Flink集群,它只执行一个Flink应用的Flink作业.Flink集群的寿命与Flink应用的寿命绑定. ...

  6. Linux下diff的操作详解

    总述 Linux diff命令用于比较文件的差异.diff以逐行的方式,比较文本文件的异同处.特别是比较两个版本不同的文件,如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子 ...

  7. 为什么对gRPC做负载均衡会很棘手?

    在过去的几年中,随着微服务的增长,gRPC在这些较小的服务之间的相互通信中获得了很大的普及,在后台,gRPC使用http/2在同一连接和双工流中复用许多请求. 使用具有结构化数据的快速,轻便的二进制协 ...

  8. 2019牛客暑期多校训练营(第一场)I Points Division(dp+线段树优化)

    给你n个点,第i个点在的位置为(xi,yi),有两个属性值(ai,bi).现在让你把这n个点划分为A和B两个部分,使得最后不存在i∈A和j∈B,使得xi>=xj且yi<=yj.然后对于所有 ...

  9. AtCoder Beginner Contest 184 E - Third Avenue (BFS)

    题意:给你一张图,\(S\)表示起点,\(G\)表示终点,\(.\)表示可以走,#表示不能走,小写字母可以传送到任意一个相同的字母的位置,问从\(S\)走到\(G\)的最小步数. 题解:假如不考虑字母 ...

  10. WSL2 使用Docker运行.NET Core

    Docker的安装在前面说过了,此处就不说了,我们检查一下版本: 步入正题. 首先,我们为项目创建Dockerfile(无扩展名) 确保Docker是启动状态: 构建镜像,注意名称必须是全部小写(此处 ...