1.读取文件并返回给客户端

  • res.sendFile(path):读取文件并返回给客户端,适合静态页面
app.get("/",function(req,res){
res.sendFile(path.join(__dirname,"index.html"))
})
  • res.render(path,data):读取文件,配合模版引擎可以将数据渲染到文件中并返回给客户端,适合动态页面
//安装ejs模版引擎
npm install ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<!-- 模版文件 -->
<body>
<h3><%= title %></h3>
<p><%= content %></p>
<p><%= author %></p>
</body>
</html>
//创建服务对象
let app = express() //引入ejs
const ejs = require('ejs') //声明模版文件的目录
app.set('views', './views')
//声明使用的模版引擎
app.set('view engine', ejs) //设置路由,监听路径的访问
app.get("/news",function(req,res){
//模拟数据库中的数据
var news = {
title:"我是标题",
content:"我是内容",
author:"我是作者"
}
//读取模版文件并插入数据,返回给客户端
res.render("news.ejs",news)
}) //开启服务,监听80端口
var server = app.listen(8086,function(){ //当前当前监听的端口号
var port = server.address().port
console.log(`Server running at http://127.0.0.1:${port}/`)
})

2.封装路由模块

  • 由来:在实际开发项目中不可能把所有的代码都写入到入口文件中,而是要进行模块化,有利于方便代码管理、项目维护

  • PS:我们之前注册路由都是通过app这个对象来完成的,按照这个思路,要封装一个路由模块,就必须接收 app这个参数,拿到这个参数后才能进行下面的路由注册操作。但是从安全的角度不建议这样做,因为这个模版可以拿app这个对象做些注册路由以外的事情,所以这个方法行不通。node.js有专门的API用来解决这个问题,既能注册路由,又不会污染全局

  • express.Router():它既是一个对象也是一个函数,它可以用来注册路由,使用方法和app.get()一致

  • 路由模块代码:

//router.js

const express = require('express');
var router = express.Router(); router.get('/',function(req,res){ })
router.get('/item',function(req,res){ })
router.get('/submit',function(req,res){ })
router.get('/add',function(req,res){ })
router.post('/',function(req,res){ })
module.exports = router;
  • 入口文件代码:
//加载express
const express = require('express');
//引入路由模块
const router = require('./router.js'); //1.创建服务对象
var app = express(); //每次访问都执行router
app.use('/',router);
//如果监听的是根目录,路径可以省略不写,等价于
//app.use(router); //启动服务
app.listen(8080,function(){
console.log('http://localhost:8080');
})

3.文件上传

  • 中间件:文件上传需要用到formidable
  • 安装 formidable
npm i -S formidable
  • 基本使用:
//引入formidable
var formidable = require('formidable')
//监听路由
app.post('/file_upload', function (req, res) {
console.log('接收到请求')
//创建实例
var form = new formidable.IncomingForm();
//设置上传文件存放的目录
form.uploadDir = "./uploads"
//保持原来的文件的扩展名
form.keepExtensions = true;
console.log('开始解析表单')
//解析表单(异步方法)
form.parse(req, function(err, fields, files) {
console.log('解析表单中')
//返回文件信息
console.log(fields, files)
// res.send(util.inspect({fields: fields, files: files}))
});
console.log('解析表单结束')
res.send("ok")
})

文件上传后会自动在uploads文件夹中保存一份,只不过文件名是随机生成的

Node.js Express 框架(2)的更多相关文章

  1. Node.js Express 框架

    Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...

  2. Node.js Express框架

    Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...

  3. Node.js Express 框架学习

    转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...

  4. Node.js Express 框架 Express

    Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...

  5. 44.Node.js Express 框架--web框架

    转自:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 简介 Express 是一个简洁而灵活的 node.js W ...

  6. Node.js+Express框架+Mongo学习(一)第一个node.js实例

    1.在桌面新建一个空的文件夹,比如叫node,当然也可以在其它地方新建. 2.命令行进入到所新建的文件夹的目录,下载Express框架,再在这个文件夹里新建一个叫final的项目 3.在项目(fina ...

  7. Node.js Express 框架 POST方法

    POST 方法 以下实例演示了在表单中通过 POST 方法提交两个参数,我们可以使用 server.js 文件内的 process_post 路由器来处理输入: index.htm 文件代码修改如下: ...

  8. Node.js Express 框架 GET方法

    GET 方法 以下实例演示了在表单中通过 GET 方法提交两个参数,我们可以使用 server.js 文件内的 process_get 路由器来处理输入: index.htm 文件代码如下: < ...

  9. node.js+express框架 修改后自启【不需要再执行start】

    我们每次修改完后都需要重新启动下才能刷新,就很麻烦'nodemon'解决了这个问题. 这里直接进行全局安装 npm install -g nodemon 安装到本地 npm install nodem ...

  10. Node.js Express 框架2

    文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 enctype 属性设置为 multipart/form-data. index.html <html> < ...

随机推荐

  1. Google Analytics & Ads 学习笔记

    更新: 2021-09-13 Naming conversion for event category, action, label https://support.google.com/analyt ...

  2. OData – Query to Expression

    前言 EF Core 可以把 expression 转换成 string, 但没办法转回来. 想把 string 转成 expression, 目前最合适的工具是 OData. 虽然 Dynamic ...

  3. .net core8 使用JWT鉴权(附当前源码)

    说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...

  4. .NET 7+Angular 4 轻量级新零售进销存系统

    前言 给大家推荐一个专为新零售快消行业打造了一套高效的进销存管理系统. 系统不仅具备强大的库存管理功能,还集成了高性能的轻量级 POS 解决方案,确保页面加载速度极快,提供良好的用户体验. 项目介绍 ...

  5. Windows系统环境变量

    添加环境变量: 添加系统变量,机器要重新启动 添加用户变量,机器不用重启: 一般添加环境变量都添加在用户变量中,但只针对这一用户生效 为了使的所有用户都能正常使用软件,通常添加系统变量

  6. linux下UsbMon-WireShark之USB协议抓取分析

    usbmon配置 使用usbmon抓包分的,是需要 内核开启CONFIG_USB_MON=m, 重新编译内核, 编译ko : make ARCH=arm64 CROSS_COMPILE=aarch64 ...

  7. 2023年11月中国数据库排行榜:OPO组合持续两月,亚信、中兴闯进前十

    长夜之中蓄力待,势如破晓初光披. 2023年11月的 墨天轮中国数据库流行度排行 火热出炉,本月共有283个数据库参与排名.本月排行榜前十名变动较大,TiDB 上升一位居第4,达梦奋勇向前重归第6,亚 ...

  8. 聊聊 HTAP 的前世今生

    随着现代社会大型实时分析应用的逐渐流行,关系型数据库已经难以处理高并发的事务请求.商业层面上,当全球进入数字化时代,数字化技术渗透到各行各业,同时产生了海量数据,数据的存储和应用是企业决策的重要依据之 ...

  9. iOS关于屏蔽暗黑模式小结

    不想适配暗黑模式可以关闭暗黑模式:在xcode12之前的版本Info.plist文件中添加Key:User Interface Style,值类型设置为String,值为Light,就可以不管在什么模 ...

  10. token有⼀定的失效性,过期了该怎么做?

    token 失效分为主动失效和被动失效 主动失效 就是自己设置函数检查token是否失效了, 主要步骤 :1 1.在登录的时候记录存储token的时间, 2. 在request文件,设置一个函数,用来 ...