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 – User Secrets & Azure Key Vault

    前言 以前就写过很多篇了 ASP.NET Core – Configuration & Options Asp.net core 学习笔记 ( Azure key-vault ) Asp.ne ...

  2. JavaScript – 类型转换

    介绍 JS 是弱类型语言, 在编程时, 有许多自动类型转换的技巧, 虽然大家都不太鼓励, 尤其是用了 TypeScript 之后, 但无可否认自动转换很方便, 看上去也很干净. 所以这篇还是要介绍一些 ...

  3. 阿里面试官常问的TCP和UDP,你真的弄懂了吗?

      前  言 作为软件测试,大家都知道一些常用的网络协议是我们必须要了解和掌握的,面试的时候面试官也非常喜欢问一些协议相关的问题,其中有两个协议因为非常基础,出现的频率非常之高,分别是 "T ...

  4. 《Vue.js 设计与实现》读书笔记 - 第13章、异步组件与函数式组件

    第13章.异步组件与函数式组件 13.1 异步组件要解决的问题 用户可以简单通过 import 异步导入组件. <template> <component :is="asy ...

  5. nginx服务器下laravel项目无法访问

    nginx服务器下laravel项目无法访问 后台用的nginx服务器,之前在本地开发项目时用的apache服务器,没想到切换到线上访问时除了首页一直显示404的错误,网页无法访问,网上搜索发现是ng ...

  6. dotnet 虚方法的使用

    // 虚方法 // 作用:允许子类,进行重写,可以实现不一样的功能 // 特点:好维护 -- 不该变原方法(虚方法)情况下,可以直接使用虚方法或者重写虚方法 VirtualMethod method ...

  7. jwt实现登录 和 接口实现动态权限

    [Authorize]   ====   using Microsoft.AspNetCore.Authorization; 登录的 DTO namespace login; public class ...

  8. python中的内置函数zip函数

    关于zip()函数,有几点要讲的. 首先,官方文档中,它是这样描述的: Make an iterator that aggregates elements from each of the itera ...

  9. python数据结构学习第一章——栈

    在这片文章中,我们使用python3.8自制一个具有基本功能的栈结构,它的功能只有push,pop,peek这三个功能 ` #!/usr/bin/env python # * coding: utf- ...

  10. 一次彻底掌握数据中心级的JVM调优实战经验

    出现内存溢出的场景通常发生在应用程序中存在内存泄漏.对象生命周期过长.对象频繁创建但未能及时回收等问题.以下是几个真实的业务场景,结合内存溢出问题,并从多个角度提出优化方法,来提高内存使用效率. 场景 ...