Node.js从入门到放弃(三)

Node.js从入门到放弃(三)

前言

这是该系列文章的第三篇,主要介绍npm和express框架的应用(下一篇使用express做一个完整的案例)

npm

小demo直接用几个js文件可以搞定,但是项目级别的目录还是需要有规范的,也基本上都需要安装第三方包,npm就是这样一个包管理器。

  • 新建一个英文命名的文件夹,进入后,在终端运行npm init -y 进行项目初始化

  • 全局安装依赖 npm i -g 包名

  • 安装开发依赖 npm i -D 包名

  • 安装生产依赖 npm i -S 包名

  • 卸载依赖包 npm uninstall 包名

  • npm update升级依赖包版本

  • npm list查看依赖的当前版本

  • npm search查找包含该字符串的依赖包

express

express 是一个前几年比较流行的Node.js框架,现在逐步被koa2,egg取代,但还是有必要学习一下的。koa2基于express封装,egg基于koa2封装。官网:http://expressjs.com/

基本使用

上文用原生http模块搭建的服务器,这次用express,它内置路由,比原生更强大.但有一点,默认不支持post请求,需要依赖第三方插件(body-parser,formidable…)

// 1. 引包
var express = require('express')
//获取服务器对象
var app = express()

//设置路由,访问首页显示 hello express
app.get('/',function(req,res){
   res.send('hello express');
})

app.get('/about', function (req, res) {
  // 在 Express 中可以直接 req.query 来获取查询字符串参数
  res.send(req.query)
})

//设置监听
app.listen(3000,function(){
    console.log('run server___');
})

静态资源开放

有些时候,服务器上的静态资源我们允许直接访问(如css,js,img)

    var express = require('express');
    var app = express();
        //开放静态资源 如原始路径为/public/1.jpg 现在可以/1.jpg 访问 ,少了一层目录
    app.use(express.static('public'))
    app.listen(3000, function() {
        console.log('run server__')
    })

404拦截处理

express 对于没有设定的请求路径,默认会返回 Cat not get xxx,如果你想要定制这个 404,需要通过中间件来配置.

// 写在最后一个路由后边
app.use(function (req, res) {
  // 所有未处理的请求路径都会跑到这里
  // do something
}

处理post请求

下面用两个完整的示例,介绍express+中间件处理post请求的过程

  • Node.js开发显示界面一般放在views文件夹内,这是路由渲染时候的默认查找
  • 未必是html,看模板引擎而定,ejs模板引擎用的就是xxx.ejs

step 1–安装依赖

  • npm i express
  • npm i body-parser //处理post请求
  • npm i formidable //处理post请求,也可以处理上传 和 body-parser 二选一就好
  • npm i art-template //模板引擎
  • npm i express-art-template //与express结合的模板引擎

step 2 --配置body-parser和模板引擎

// 1. 引包
var express = require('express')
var bodyParser = require('body-parser')

//获取服务器对象
var app = express()

//配置bodyParser
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

//整合模板引擎
app.engine('html', require('express-art-template'))

app.get('/', function (req, res) {
  res.render('form.html');
})

//处理表单的post请求,req.body用来接收数据
app.post('/post', function (req, res) {
     res.send(req.body);
})

//设置监听
app.listen(3000,function(){
  console.log('run server___');
})

step 3 --编写form.html代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
    <form action="/post" method="post">

        <p>姓名<input type="text" name="name"></p>
        <p>年龄<input type="text" name="age"></p>
        <p><input type="submit"></p>

    </form>
</body>
</html>

使用formidable替代body-parser

// 1. 引包
var express = require('express')
var formidable = require('formidable');


//获取服务器对象
var app = express()

//整合模板引擎
app.engine('html', require('express-art-template'))

app.get('/', function (req, res) {
      res.render('form.html');
})

app.post('/post', function (req, res) {
 var form = new formidable.IncomingForm();

//可以自己打印看看回调函数里边三个参数是什么

 form.parse(req, function (err, fields, files) {
  res.send(fields);
 })
})

//设置监听
app.listen(3000, function () {
     console.log('run server___')
})

发布了450 篇原创文章 · 获赞 787 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/103969000