评论

收藏

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

开发技术 开发技术 发布于:2021-07-08 15:34 | 阅读数:460 | 评论:0

  
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 expressapp.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请求的过程
DSC0000.png 目录结构  补充

  •   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()//配置bodyParserapp.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>
DSC0001.png body-parser处理post请求效果  使用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___')})
DSC0002.png formidable处理post请求效果

  
关注下面的标签,发现更多相似文章