node 之 express 框架(初级)

一、express 热更新
1、安装扩展

npm install node-dev -D

2、在根目录下的 package.json 文件中进行配置
在这里插入图片描述
3、之后的启动执行下面的命令即可

npm run dev

二、mvc中的 模板引擎
1、ejs模板引擎的安装

npm install ejs -s

2、在根目录下的app.js文件中配置

app.set('view engine', 'ejs');

在这里插入图片描述
二 express 安装 mysql
1、在终端键入以下命令

npm install mysql

2、在根目中新建db文件夹,再在该文件夹中新建一个index.js文件

const mysql = require('mysql')
var config = {
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: 'root',
    database: '' //数据库名
}

var pool = mysql.createPool(config)

pool.getConnection((err, connection) => {
    if (err) {
        console.log(err.message);
    } else {
        console.log("连接成功");
    }
})
module.exports = pool;

2、在根目录中新建一个modules, 再在该文件中新建一个goods.js 文件(这儿只是做一个例子,跟据实际情况命名)

var db = require('../db/index')
function getData() {
    return new Promise((resolve, reject) => {
        db.query(sql, (err, res) => {
            if (err) {
                reject(err)
            } else {
                resolve(res)
            }
        })
    })
}
exports.getData = getData

3、在控制器中

var goods = require('../../modules/goods') //引入刚刚写的model文件

var UserController = {
	//因为是异步调用,所以如果需要异步变同步,则需要在这儿用async await来写
    getUserInfo: async(req, res) => { 
        let result = await goods.getData()
        console.log(result) //得到的结果就是查询出来的数据集合
        res.status(200) //这儿可以自定义状态码,比如 200 , 404 , 500 默认是200
        res.end('api getUserInfo')
    }
}

module.exports = UserController;

三、路由(路由,一般我们得遵守 RESTful 原理
在路路中,我们可以定义各式各样的路由,如下所示。

//正常情况下,为了区分前台、后台、api,我们可以在入口文件app.js中如下书写
//当前文件是项目的入口文件app.js
var admin = require('./routes/admin/index') //定义后台路由的入口文件
app.use('/admin', admin) //引入后台路由的入口文件

var api = require('./routes/api/index') //定义api路由的入口文件
app.use('/api', api) //引入api路由的入口文件

在这里插入图片描述

//以api路由入口文件为例
//当前文件 /routes/api/index.js
var express = require('express');
var app = express();

var login = require('./login') //定义登录模块的路由文件
var user = require('./user') //定义用户模块的路由文件
app.use('/login', login) //引用
app.use('/user', user)//引用

module.exports = app;

在这里插入图片描述

//当前文件routes/api/user.js
var express = require('express');
var router = express.Router();


//put请求(常用于更新操作)
//需要注意的是,在用 Postman做put测试的时候
//地址是 http://127.0.0.1:3000/api/user/update/555
//后面的555即是参数id,也就是说,在地址栏不需要写 "id" 这个英文单语
router.put('/update/:id', (req, res) => {
    console.log(req.body) //打印出参数
    res.status(200)
    res.send({ code: 200, msg: 'success' })
    res.end()
})

//post请求(常用于新增操作)
router.post('/add' , (req , res)=>{
    console.log(req.body)
    res.status(500)
    res.send({ code: 200, msg: 'success' })
    res.end()
})

//地址跟上面的put是一样的意思
router.get('/:id', (req, res) => {
    console.log(req.params)
    res.send()
})

//地址跟上面的put是一样的意思
router.delete('/delete/:id', (req, res) => {
    console.log(req.params)
    res.end()
})
module.exports = router;
### 常见的 WebSocket 打包错误及解决方案 在使用 WebSocket 技术时,特别是在项目打包阶段,可能会遇到一些常见的问题。以下是可能发生的错误及其对应的解决方案: #### 1. **命名空间冲突** 如果项目中同时引入了多个 WebSocket 实现库(例如 `UnityWebSocket` 和其他第三方库),可能导致命名空间冲突。这种情况下,在编译或运行时会出现重复定义类或方法的情况[^1]。 **解决方案**: 可以通过调整项目的依赖管理策略来避免此类问题。具体做法包括: - 使用模块化工具(如 Webpack 或 Rollup)对不同库进行隔离处理。 - 明确指定使用的 WebSocket 库版本,并通过别名机制区分不同的实现。 ```javascript // 示例:Webpack 中配置 resolve.alias 来避免命名冲突 module.exports = { resolve: { alias: { 'websocket-library-a': path.resolve(__dirname, './node_modules/websocket-library-a'), 'websocket-library-b': path.resolve(__dirname, './node_modules/websocket-library-b') } } }; ``` --- #### 2. **跨域问题** 即使 WebSocket 是一种高效的双向通信协议,但在实际应用中仍需注意跨域限制。如果服务器端未正确设置 CORS 头部信息,则客户端无法成功建立连接[^5]。 **解决方案**: 确保服务端允许来自特定源的请求。可以在 Node.js 的 Express 框架中这样配置: ```javascript const express = require('express'); const app = express(); const http = require('http').createServer(app); const io = require('socket.io')(http); app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有域名访问 res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); next(); }); io.on('connection', (socket) => { console.log('a user connected'); }); http.listen(3000, () => { console.log('listening on *:3000'); }); ``` --- #### 3. **性能优化不足** 虽然 WebSocket 协议本身具有较低的消息传递延迟和较少的头部开销,但如果未能合理设计其应用场景,仍然可能出现效率低下甚至崩溃的现象[^3]。 **建议措施**: - 对于高频率的小型消息交互场景优先考虑 WebSocket;而对于低频次的大文件上传下载操作则更适合采用 HTTP 请求。 - 定期清理不再活跃的连接以释放资源占用。 --- #### 4. **环境适配不当** 某些旧版浏览器或者特殊网络环境下可能存在对标准 WebSocket 支持不佳的情形。此时如果没有做好降级方案的话也容易引发兼容性方面的问题[^2]。 **应对办法**: 可以借助 polyfill 工具比如 SockJS 提供更广泛的设备支持度。安装命令如下所示: ```bash npm install sockjs-client --save ``` 随后按照官方文档指引替换原有纯原生 API 调用部分即可。 --- ### 总结 以上列举了几种典型的关于 WebSocket 在开发过程中的挑战以及相应的处置手段。开发者应当依据自身业务需求灵活选用合适的技术栈组件,并且始终保持良好的编码习惯从而最大程度规避潜在风险因素的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值