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. ASP.NET Core – Razor Pages 冷知识

    Multiple Form Binding 问题 在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候. 由于 2 个 mo ...

  2. SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24

    无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私.安全和专有风险.在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式, ...

  3. HttpURLConnection和HttpClient使用

    HttpURLConnection 这是Java的标准类,继承自URLConnection,可用于向指定网站发送GET/POST请求. 方法描述 void setRequestMethod(Strin ...

  4. 系统编程-进程-探究父子进程的数据区、堆、栈空间/ 当带缓存的C库函数遇上fork

    1. test1 #include <stdio.h> #include <unistd.h> #include <stdlib.h> /******全局变量位于数 ...

  5. SuperMap iDesktopX创建HBase数据源并导入数据

    需提前部署HBase集群,HBase环境搭建请查看文章https://www.cnblogs.com/zhangyongli2011/p/12034628.html 本文基于10.1.1 win版本s ...

  6. 【赵渝强老师】MongoDB中的索引(下)

    (四)索引的类型三:复合索引(Compound Index) MongoDB支持复合索引,即将多个键组合到一起创建索引.该方式称为复合索引,或者也叫组合索引,该方式能够满足多键值匹配查询使用索引的情形 ...

  7. 【赵渝强老师】Redis案例分析:用setbit统计活跃用户

    一.需求背景 首先,我们来看一下需求:网站统计用户登录的次数,具体如下: 网站有1亿个用户,有经常登录的,也有不经常登录的 如何来记录用户的登录信息 如何查询活跃用户:比如:一周内,登录3次的 二.使 ...

  8. git工具:sourcetree使用中的部分问题

    这段时间经常用到这个工具.就当记个笔记,记录一下我的一些问题. 问题一: 如果想要拉取远端更新: 第一步:先登陆sourcetree,点击"抓取". 第二步:在终端输入:git s ...

  9. 2021年7月国产数据库排行榜:openGauss成绩依旧亮眼,Kingbase向Top 10发起冲刺

    7月份的国产数据库流行度排行榜已经揭晓.本期榜单展示的136个数据库中,近三分之二实现了评分增长.笔者认为这与6月份中国信通院发布第十二批大数据产品能力评测结果有关,65家企业的120款产品通过了本次 ...

  10. 0503-autograd实战之线性回归

    0503-autograd实战之线性回归 目录 一.用 variable 实现线性回归(autograd 实战) 二.第五章总结 pytorch完整教程目录:https://www.cnblogs.c ...