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日志,及设置日志输出级别

    Spark日志,及设置日志输出级别 1.全局应用设置 2.局部应用设置日志输出级别 3.Spark log4j.properties配置详解与实例(摘录于铭霏的记事本) 文章内容来源: 作者:大葱拌豆 ...

  2. Scala安装后,在IDEA中配置

    IDEA中配置Scala 一.设置Module 二.添加Scala的SDK 三.寻找本地scala安装路径 四.测试是否可以新建有Scala Class 五.踩坑填坑记录 5.1:Error:(4, ...

  3. java 将内容写入文件 txt

    @Test //将内容写入文件 public void xieru() throws Exception{ FileWriter fileWriter=new FileWriter("d:\ ...

  4. three.js cannon.js物理引擎制作一个保龄球游戏

    关于cannon.js我们已经学习了一些知识,今天郭先生就使用已学的cannon.js物理引擎的知识配合three基础知识来做一个保龄球小游戏,效果如下图,在线案例请点击博客原文. 我们需要掌握的技能 ...

  5. 如何获得svn的版本号信息?

    方法一  popen(可获取命令行执行后的输出结果) 转载自: C++执行命令行指令并获取命令行执行后的输出结果 1 /* 2 Execute command line commands and ge ...

  6. 【uva 11082】Matrix Decompressing(图论--网络流最大流 Dinic+拆点二分图匹配)

    题意:有一个N行M列的正整数矩阵,输入N个前1~N行所有元素之和,以及M个前1~M列所有元素之和.要求找一个满足这些条件,并且矩阵中的元素都是1~20之间的正整数的矩阵.输入保证有解,而且1≤N,M≤ ...

  7. SP3267 DQUERY - D-query 莫队板子题

    题意可见:https://www.luogu.com.cn/problem/SP3267 可在vj上提交:https://vjudge.net/problem/SPOJ-DQUERY 题意翻译 给出一 ...

  8. 1006 How many?

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 36   Accepted: 2 Description 有一天,小Q给了小J ...

  9. Codeforces Round #651 (Div. 2) A Maximum GCD、B GCD Compression、C Number Game、D Odd-Even Subsequence

    A. Maximum GCD 题意: t组输入,然后输入一个n,让你在区间[1,n]之间找出来两个不相等的数a,b.求出来gcd(a,b)(也就是a,b最大公约数).让你求出来最大的gcd(a,b)是 ...

  10. hdu 1517 Multiplication Game

    题意: 用整数p乘以2到9中的一个数字.斯坦总是从p = 1开始,做乘法,然后奥利乘以这个数,然后斯坦,以此类推.游戏开始前,他们画一个整数1 < n < 4294967295,谁先到达p ...