node.js入门到放弃Day2——npm工具 + Express 框架 + 封装异步API案例

    技术2025-06-01  21

    6. npm

    6.1 npm 命令行工具

    查看版本号:

    npm -v

    升级npm:

    npm install --global npm npm i -g npm

    常用命令:

    npm init -y npm i -S 包名 npm un -S 包名 npm help npm 命令 --help

    7.Expess

    原生的 http 在某些方面表现不足以应对我们的开发需求,所以我们就需要使用框架来加快我们的开发效率,框架的目的就是提高效率,让我们的代码更高度统一。

    在node 中,有很多 Web 开发框架,我们这里以学习 express 为主。

    var express = require('express'); var app = express(); // 当服务器收到 get 请求 / 的时候,执行回调处理函数 app.get('/', function (req, res) { // 在 Express 中可以直接通过 req.query 来获取查询字符串参数 console.log(req.query) res.send('hello express'); }); app.get('/pinglun',funciton(req,res){ // req.query // 在 Epress 中使用模板引擎有更好的方式: res.render ('文件名',{模板对象}) // art-template 结合 Express 来使用 }); // 公开指定目录,只要这样做了,你就可以直接通过 /public/xx 的方式访问 public 目录中的所有资源了 app.use('/public/',express.static('./public/')); // 相当于 server.listen app.listen(3000,function(){ console.log('server is running...'); });

    7.1 起步

    安装:

    npm install --save express

    hello world:

    const express = require('express'); const app = express(); app.get('/', (req, res) => res.send('hello express!')); app.listen(3000, () => console.log('app is running on 3000....'))

    7.1.2 基本路由

    概念:一个端口就是一个路由

    路由就是一张表;这个表有具体的映射关系;

    get:

    // 当你请求 / 的时候,对应相应的功能也就是后面的func app.get('/',funciton (req, res) { res.send('hello world') })

    post:

    // 当你请求 / 的时候,对应相应的功能也就是后面的func app.post('/',funciton (req, res){ res.send('this is post req') })

    7.1.3 静态服务(开放资源)

    // 直接访问具体的路径 app.use(express.static('public')); // 这个写法比较好,两个都可以 // '/static' 这里是个别名 可以起其它别名 app.use('/static',express.static('public')); app.use('/static',express.static(path.join(__dirname,'public')));

    7.2 在 Express 中配置 art-template 模板引擎

    https://github.com/aui/art-template仓库

    https://aui.github.io/art-template/中文文档

    安装:

    npm i -S art-template npm i -S express-art-template

    配置:

    app.engine('art',require('express-atr-template'));

    使用:

    app.get('/',funciton(req, res) { // express 默认回去项目中国的views 中去找 index.html res.render('index.html', { title: 'hello world' }) })

    如果希望修改默认的 view 视图渲染储存目录,可以:

    // 第一个参数 别写错 app.set('views', 目录路径);

    回到首页

    7.3 在 Express 中获取表单 GET 请求参数

    Express 内置了一个API, 可以直接 req.query

    req.query

    7.4 在 Express 获取表单 POST 请求体数据

    在 Express 中没有内置的表单 POST 请求体的 API,这里我们需要使用一个第三方包: body-parser

    安装:

    npm install body-parser -S

    配置:

    // 注意: 一定配置模板引擎和 body-parser 一定要再 app.user(router) 挂载路由之前 app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json());

    修改完代码自动重启

    nodemon 来解决我们频繁修改代码重启服务器问题:

    安装:

    npm i -g nodemon

    使用:

    nodemon app.js

    只要是 nodemon 启动的服务,它会自动监视你代码是否改动,改动了自动刷新

    文件操作的相对路径中

    文件操作路径:

    ./data/a.txt 相对于当前目录data/a.txt 相对于当前目录/data/a.txt 绝对路径,当前文件模块所处磁盘根目录c:/data/xx…/a.txt 绝对路径

    模块操作路径:

    // 这里如果忽略了 . 也是磁盘根目录 require('/data/foo.js') // 相对路径 require('./data/foo.js') // 模块加载的路径中的相对路径不能省略 ./

    演讲技巧:


    封装异步 API

    function fn(callback) { // 这里相当于有这段代码: // var callback = function(data) setTimeout(function() { var data = 'hello'; callback(data); }, 1000) } // 如果需要获取一个函数中异步操作的结果,则必须通过回调函数来获取 fn(function(data) { console.log(data); }) // 回调函数: 获取一步操作的结果

    案例写不出,笔记又整理的乱。。我太难了 点击跳转Day3——MongoDB+回调地狱讲解

    Processed: 0.019, SQL: 9