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. Redis 发布订阅模式

    概述 Redis 的发布/订阅是一种消息通信模式:发送者(Pub)向频道(Channel)发送消息,订阅者(Sub)接收频道上的消息.Redis 客户端可以订阅任意数量的频道,发送者也可以向任意频道发 ...

  2. USB2.0 DP DM VBUS

    在USB 2.0中,设备成功枚举的标志可以通过观察 D+ (dp).D- (dm) 和 VBUS 引脚的电压波形来判断.以下是这些信号在USB 2.0枚举过程中常见的状态: VBUS (5V供电): ...

  3. Linux-USB驱动笔记--设备控制器(UDC)驱动

    1.前言 在Linux-USB驱动笔记(四)–USB整体框架中有説到设备侧的设备控制器(UDC),下面我们来具体看一下. 2.设备控制器(UDC) USB设备控制器(UDC)驱动指的是作为其他USB主 ...

  4. 轨道控制器 threejs

    就是一个可以360转动的相机,通过不断的改变相机的参数 然后渲染达到效果. // 引入相机控件  -- 轨道控制器 // console.log('OrbitControls',OrbitContro ...

  5. Android复习(二)应用资源

    1. res下的资源类型 目录 资源类型 animator/ 用于定义属性动画的 XML 文件. anim/ 用于定义渐变动画的 XML 文件.(属性动画也可保存在此目录中,但为了区分这两种类型,属性 ...

  6. dan

    点击查看代码 /* GGrun */ #include<bits/stdc++.h> using namespace std; namespace Octane { //non terra ...

  7. 在 Kubernetes 中基于 StatefulSet 部署 MySQL(下)

    大家好,我是老 Z! 上篇文章实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化界面这种形式.本文将会介绍如何使用 GitOps 来部署 M ...

  8. jmeter-模拟带参数的请求与上传文件

    请求参数照着前端请求的样式填即可: header带content: header不带content_type: 总结:上传文件时headers里面不能带content_type参数

  9. 什么是前后端分离应用(Full-stack Separation),想当然就会理解错

    前后端分离应用指的是将应用的前端部分(用户界面与交互逻辑)和后端部分(业务逻辑.数据处理.服务器响应)拆分成独立的模块,各自通过 API 进行通信.这种架构设计的目的是提高开发效率.增强可扩展性和灵活 ...

  10. Tomcat线程池详解,为什么SpringBoot最大支持200并发?

    Q:经典面试题,SpringBoot 应用可以同时并发处理多少请求? A:SpringBoot 应用并发处理请求数主要由两个因素影响,使用的 Servlet容器(默认使用 Tomcat,常用的还有 j ...