node.js从0到0.1

这篇博客介绍了Node.js中使用原生Http模块和Express框架进行网络请求与响应的方法,包括GET和POST请求的参数处理。同时,详细讲解了如何操作MySQL数据库以及使用Mongoose操作MongoDB。此外,还探讨了Express中间件的概念和应用,它是简化Web应用开发的关键。
摘要由CSDN通过智能技术生成

node.js网络请求与响应

使用原生Http包

//引入模块
var http = require('http');


// 返回一个server示例
var server = http.createServer();

//设置请求处理函数
server.on('request',function(request,response){
    if(request.url == '/login'){
        // response可以使用write来给客户端发送相应数据
        response.write('hello node.js')
    }else if(request.url == '/'){
        response.write('please login first')
    }else{
        var product = [
            {
                name:'苹果',
                price:100
            },
            {
                name:'小米',
                price:200
            },
            {
                name:'三星',
                price:300
            }
        ];
        response.end(JSON.stringify(product));
    }
    // 最后一定是用end来结束相应
    response.end();
})

//绑定端口号 启动服务器 类似于日志
server.listen(3000,function(){
    console.log('服务器启动成功了');
});

安装express

  1. 选择一个文件夹目录 新建express项目存放目录 mkdir express-demo
  2. cd express-demo 并初始化package.json文件 npm init -y
  3. 初始化express依赖 npm i express --save
  4. 在express-demo目录下就可以创建app.js等来编写代码

express简单使用

const express = require('express');
const app = express();

app.get('/',function(req,res){
    res.send('hello world')
})

app.get('/login',function(req,res){
    res.send('hello 欢迎登陆')
})

app.get('/getUserList',function(req,res){
    var userList = [
        {name:'黄杰1',age:10},
        {name:'黄杰2',age:20},
        {name:'黄杰3',age:30},
        {name:'黄杰4',age:40},
    ]
    res.send(userList)
})

// 加载外部文件资源 配置模板引擎 一定在使用router之前
//使用模板引擎要提前下载安装 npm i --save art-template
app.engine('html',require('express-art-template'))

// 公开指定目录
//这样做了 就可以直接通过/public/xx的方式来访问public目录中的所有资源了
//然后通过/public/js/main.js来访问资源
app.use('/public',express.static('./public/'))
app.use('/node_modules',express.static('./node_modules/'))

app.listen(3000,function(){
    console.log('running...');
})

每次修改代码要重启服务器的解决办法nodemon

  1. npm i nodemon -g
  2. nodemon -v检查是否安装成功
  3. 使用nodemon + 文件名来运行该程序 以后修改代码 会自动重启服务器

获取参数

get协议

请求url : http://localhost:3000/login?username=admin&pass=123456

app.get('/login',function(req,res){
    // 在express中直接使用req.query获取查询的字符串请求参数
    console.log(req.query);
    res.send('hello 欢迎登陆')
})

输出结果:{ username: ‘admin’, pass: ‘123456’ }

post协议

请求表单

<form action="/postLogin" method="POST">
    用户名:<input type="text" name="username">
    密  码:<input type="password" name="password"/>
    <input type="submit" value="登录"/>
</form>
  1. npm i body-parser --save 来安装接受post协议请求参数的依赖
  2. 在app.js中配置如下代码
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

配置post路由

// post协议的请求参数req.body
app.post('/postLogin',function(req,res){
    console.log(req.body);
})

输出结果:{ username: ‘huangjie’, password: ‘123456’ }

express中提取路由模块

在app.js层级新建router.js文件
根据不同的路由调用不同的回调函数

const express = require('express');
// 使用express配置的路由
const router = express.Router();

const fs = require('fs');

router.get('/getUser',function(req,res){
    fs.readFile('./public/db_user.txt','utf-8',function(error,data){
        if(error) return console.log('读取数据失败');
        var user = JSON.parse(data).user;
        res.render('index.html',{
            user
        })
    })
})

router.get('',function(){});
router.get('',function(){});
router.get('',function(){});
router.get('',function(){});
...

module.exports = router;

在app.js文件中

注意点:

  1. 所有的配置一律全部写在app.use(router)前
  2. post协议的参数读取前文有说明 不然获取不到
const bodyParser = require('body-parser');
const express = require('express');
const router = require('./router');
const app = express();


// 加载外部文件资源 配置模板引擎 一定在使用router之前
app.engine('html',require('express-art-template'))

// 暴露静态资源 一定在使用router之前
app.use(express.static('./views/'))


// 配置读取post协议请求参数 一定在使用router之前
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

// 使用路由
app.use(router);

app.listen(3000,function(){
    console.log('running');
})

node.js操作mysql

全程统一一个方法 .query(),编写不同的sql语句即可

  1. 安装mysql npm i mysql --save
  2. 四步走
// node.js操作数据库
var mysql = require('mysql');

var connection = mysql.createConnection({
    host:'localhost',
    user:'root',
    password:'root',
    database:'nodedb'
});

connection.connect();

connection.query('select * from student',function(error,results,fields){
    if(error) throw error;
    results.forEach(item => {
        console.log(item);
    });
});

connection.end();
  1. 打印结果
RowDataPacket { id: 1, name: '黄杰1', age: 20, gender: '男', hobby: '跳舞' }
RowDataPacket { id: 2, name: '黄杰2', age: 20, gender: '男', hobby: '跳舞' }
RowDataPacket { id: 3, name: '黄杰3', age: 20, gender: '男', hobby: '跳舞' }

附上sql语句

USE nodedb;
CREATE table student(
	id int(10) not null PRIMARY KEY,
	name VARCHAR(20) not null,
	age int(10),
	gender VARCHAR(29) DEFAULT '男',
	hobby VARCHAR(30)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

insert into student VALUES
(1,'黄杰1',20,'男','跳舞'),
(2,'黄杰2',20,'男','跳舞'),
(3,'黄杰3',20,'男','跳舞')

SELECT * from student;

使用mongoose操作mongodb

先下载安装Mongodb,参考mongodb菜鸟教程即可
再安装mongoose npm i --save mongoose
操作mongodb数据库参考文档即可

// 使用Mongoose来操作mongodb

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

const Cat = mongoose.model('Cat', { name: String , age:Number});

// new Cat(
//     { name: '小黄',age:12 }
// ).save()

Cat.findOne({
    name:'小蓝'
})
.then(data => {
    if(data){
        console.log('用户已存在');
    }else{
        console.log('用户不存在');
        return new Cat({
            name:'小蓝',
            age:40
        }).save();
    }
})
.then(data => {
    if(data){
        console.log(data);   //上次.then的返回值
    }
})

express中间件

     类似于java和前端vue框架中的过滤器,主要是指封装所有Http请求细节处理的方法。

一次Http请求通常包含很多工作,如记录日志、ip过滤、查询字符串、请求体解析、Cookie处理、权限验证、参数验证、异常处理等,但对于Web应用而言,并不希望接触到这么多细节性的处理,因此引入中间件来简化和隔离这些基础设施与业务逻辑之间的细节,让开发者能够关注在业务的开发上,以达到提升开发效率的目的。

var express = require('express');

var app = express();

// 不关注请求路径的中间件,任何请求都进入 java中的过滤器
app.use(function(req,res,next){
    console.log('请求进入1');
    res.send('hello 中间件');
    next();
})
app.use(function(req,res,next){
    console.log('请求进入2');
    next();
})

// 以/xxx开头的路径中间件
app.use('/a',function(req,res,next){
    console.log(req.url);
})

app.use('/b',function(req,res,next){
    console.log(req.url);
})

// 加载外部文件资源 配置模板引擎 一定在使用router之前
app.engine('html',require('express-art-template'))

// 暴露静态资源 一定在使用router之前
app.use(express.static('./views/'))

app.use(function(req,res){
    res.render('error.html')
})

app.listen(3000,function(){
    console.log('running...');
})

以上内容是基于express框架,还有koa框架,以后再完善

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值