Node.js note3(http模块&express&node+mongoose连接MongoDB&模板引擎EJS)

http模块

http模块是node重要的核心模块之一。 Node中http模块详解(服务端篇)
在这里插入图片描述
node官方中文文档:http://nodejs.cn/api/


先来看看最原生node写服务,简单的结构 webserver

// 1.引用http模块
var http=require("http");  

// 2.创建webserver   req:请求---发送    res:相应----接收
http.createServer((req,res)=>{

    // 4.响应文档头   ----   设置当前内容的字符编码和  相应的状态码
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"})

    // 5.返回数据
    res.end("ok")
    
}).listen(3000)  // 3.监听端口
4.1、路由

通过URL路径来区分不同的请求,从而找到不同的功能模块来进行执行。

通俗点的话,路由就是根据不同的请求,找到不同的代码完成处理。

我说:原生nodejs的路由分发,据我所见过的,挺麻烦的,性能也差。不过后期学到了express,以中间件的方式分发不同的路由,写起来感觉就舒服很多。

4.2、URL模块

对当前的url进行相关操作。

语法:url.parse(req.url,true);
意为得到请求的url数据,第二个参数为true的话,就可以把当前url中的query页面数据转换成对象方便使用。

4.3、路由练习

两个页面登陆和注册 ,通过点击提交按钮, 后台根据url来调用不同的功能显示。
在这里插入图片描述 在这里插入图片描述
登录/注册页面布局:

<form action="http://127.0.0.1:3000/login" >
    <input type="text" placeholder="登录用户名" name="username">
    <input type="password" placeholder="登录密码" name="userpass">
    <button>登录</button>
</form>

node后台服务文件:

var http=require('http');
var url=require('url');
http.createServer((req,res)=>{
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"})
    // 进行路由判断
    var userUrl=url.parse(req.url,true)//通过url模块的parse方法可以将请求参数对象化,然后可以通过res.end返回前台
    if(userUrl.pathname=="/favicon.ico") return;//这个小图标node自行请求的,屏蔽掉
    // console.log(userUrl);//是一个Url对象,里一个属性query存放自动转化过来的的请求参数
    if(userUrl.pathname=="/login"){
        res.end("恭喜 "+userUrl.query.username+" 登录成功");
        return;
    }
    if(userUrl.pathname=="/register"){
        res.end("注册成功 您的账号是:"+userUrl.query.username);
        return;
    }
    res.end("服务器仅连接成功,没有做任何操作");
}).listen(3000,()=>console.log("success"))

在这里插入图片描述
来看看请求结果:
在这里插入图片描述 在这里插入图片描述


express

express 第三方的框架 基于nodejs极简web框架 地位非常

先来看看最简单最基本的用法:
在这里插入图片描述
server.js
在这里插入图片描述
demoRou.js
在这里插入图片描述

Express官方网站 API接口文档:https://www.expressjs.com.cn/4x/api.html

5.1、什么是Express

express 是一个简洁而灵活的 node.js Web 应用框架, 提供了一系列强大的特性和丰富的 HTTP 工具。

功能:扩展了web所需要的基本功能,丰富了HTTP工具,可以快速搭建一个网站。

5.2、Express—安装

npm install --save express

5.3、Express—创建api接口

可以在该项目服务器文件目录下创建一个server.js文件 。

var express=require("express");
var app=express();
app.get("/user/login",function(req,res){
    res.send({msg:"ok"})
})
app.get("/ser/home",function(req,res){
    res.send({msg:"ok"})
})
var server=app.listen(3000)

解释:

  • app.get() 接受get请求;
  • app.post() 接受post请求;
  • app.all() 方法让路由函数接收所有指定URL的HTTP方法。

路径中使用*通配符可以匹配所有,如:app.get("/a*",function(req,res){}匹配以a开头的所有url 。

5.4、Express—中间件

中间件:是每次接收到请求都会被先调用的函数,算是一个场所,给一些特定功能添加提供的。中间件中可以执行任何代码,比如更改请求和响应对象,结束请求响应周期等。中间件可以一次性放入多个回调函数,但有执行顺序,放在前面的先执行。中间件算是客户端对服务器请求的拦截器。

语法app.use([path,] callback [,callback ...])

将指定的一个或多个中间件函数安装在指定的路径上:当所请求路径的基数匹配时,将执行中间件函数。
官网: https://www.expressjs.com.cn/4x/api.html#app.use

// path默认值为“ /”,因此将为对应用程序的每个请求,执行不带路径安装的中间件。
app.use(function(req,res,next){
	next() // 向后执行,跳转到下一个中间件
})

也可以把回调函数写在外面,或者模块化引入,然后通过app.usr(callback-name) 来应用中间件。

总之我理解的是,中间件就是一个任意的函数,然后可以通过app.use来应用这部分函数。

比如说我们自己做一个简单例子 ,自己做一个中间件
在这里插入图片描述
然后导入我们暴露的中间件模块:var myselfMW=require('./myself-middleware')
在这里插入图片描述
然后用app.use(中间件)在中间件中调用我们写的模块函数:由于在中间件的最后一位,所以最后执行。
在这里插入图片描述
扩展
路由中间件比如 body-parser ,在给post传输数据时使用。
安装方式:如果用yarn安装的话,yarn add body-parser

5.5、Express—路由

路由是根据url,决定了哪部分去响应客户端请求。

在HTTP请求中,可以通过路由提取出请求的URL以及GET/POST参数。

5.6、Express—路由创建

创建router文件夹,然后创建路由文件命名为userRouter.js 。

// 存放路由的文件
var express=require("express");
var router=express.Router()
// 设置路由
router.get("/login",function(req,res){
    res.send({msg:"我是login"})
})
router.get("/zhuce",function(req,res){
    res.send({msg:"我是zhuce"})
})
// 暴露路由
module.exports=router

5.7、Express—路由使用

server.js文件中,引用路由 。

var express=require("express");
var app=express();
// 引用路由文件
var userRouter=require("./userRouter");
// 中间件中使用路由
app.use("/user",userRouter)
// 请求是localhost:3000/user/路由文件中的地址
app.listen(3000)

我说:跟直接用express写请求,怎么说呢,感觉变化就是,把请求单独封装起来了,然后在主服务文件中引用路由。这个server.js主服务文件就像是一个控制器,可以控制引用哪个路由。

5.8、静态资源文件 —webserver

使用中间件配合app.use(express.static(path.join(__dirname, “文件夹名”)));

5.9、express\中间件\mongoose\连接MongoDB 联合小栗子

数据库服务文件:index.js

// 封装数据库连接的内容
var mongoose=require("mongoose")

mongoose.connect("mongodb://localhost:27017/某数据库名",{ useNewUrlParser: true ,useUnifiedTopology: true})
var db=mongoose.connection
db.on("err",console.error.bind(console,"数据库连接失败"))
db.on("open",(ok)=>{
    console.log("数据库连接成功")
})
var schemauser=new mongoose.Schema({
    name:String,
    age:Number,
    sex:Boolean
})
var col=mongoose.model("集合名",schemauser)//这个库的名字尽量都加s,因为不加,系统会默认给加上
module.exports=col

中间件:user.js

var express=require("express");

var router=express.Router()

var col=require("../db/index")

router.get("/find",(req,res)=>{
    col.find().then((ok)=>{
        console.log(ok)
        res.send({msg:"查询的数据",data:ok})
    }) 
})
router.get("/insert",(req,res)=>{
    // 执行新增操作
   var datacol= new col({
        name:"嘻嘻",
        age:19,
        sex:false
    })
    // 开始插入
    datacol.save().then((ok)=>{
        console.log(ok)
    })
    res.send("我是新增的路由")
})
module.exports=router

node后台服务文件:server.js

var express=require("express");

var app=express()

app.use("/",(req,res,next)=>{
    res.header('Access-Control-Allow-Origin', '*');

	res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');

    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
    
    next()//必须要加
})

// 引入路由文件
var ruser=require("./router/user")
// 使用中间件调用路由
app.use("/user",ruser)

app.listen(3000)

模板引擎 EJS

在这里插入图片描述

模板引擎 EJS–配置和使用
下载 :npm install --save ejs

app.set()设置了模版文件夹的路径

配置:
app.set("view engine","ejs") //让express 对模板进行识别 认识ejs

app.set("views",__dirname+"/ejs")//设置模板的相对路径(放置到ejs的文件夹中)

创建模板文件:在指定文件夹中创建 创建以.ejs结尾的文件来进行编写模板。

模板引擎 EJS—模板编写

ejs文件内的内容和html相同 ,可以写一个基本html页面框架放置当中。

1、插入数据:ejs的数据源是在 render("文件名",{数据})中进行传递的

app.get("/",function(req,res){
    res.render("文件名",{
        obj:{
            name:"xixi"
        }
    })
}) 

2、使用数据 <%= 数据 %>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8 JavaScript引擎的JavaScript运行环境,可用于服务器端编程。Express是一个基于Node.js平台的Web应用开发框架,提供了简单易用的API,可以快速构建Web应用程序。Mongoose是一个优秀的Node.js模块,用于连接MongoDB数据库,并提供了丰富的API来操作MongoDB数据库。 下面是使用Node.jsExpressMongoose操作MongoDB的基本流程: 1. 安装Node.jsExpressMongoose 在终端中执行以下命令: ``` npm install node npm install express npm install mongoose ``` 2. 连接MongoDB数据库 在app.js或server.js文件中,使用Mongoose连接MongoDB数据库: ``` var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); ``` 3. 定义数据模型 在models目录下创建一个JavaScript文件,使用Mongoose定义数据模型: ``` var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ name: String, age: Number, email: String }); module.exports = mongoose.model('User', UserSchema); ``` 4. 实现API接口 在routes目录下创建一个JavaScript文件,实现API接口: ``` var express = require('express'); var router = express.Router(); var User = require('../models/user'); router.get('/users', function(req, res, next) { User.find(function(err, users) { if (err) return next(err); res.json(users); }); }); router.post('/users', function(req, res, next) { var user = new User(req.body); user.save(function(err) { if (err) return next(err); res.json(user); }); }); router.get('/users/:id', function(req, res, next) { User.findById(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); router.put('/users/:id', function(req, res, next) { User.findByIdAndUpdate(req.params.id, req.body, function(err, user) { if (err) return next(err); res.json(user); }); }); router.delete('/users/:id', function(req, res, next) { User.findByIdAndRemove(req.params.id, function(err, user) { if (err) return next(err); res.json(user); }); }); module.exports = router; ``` 5. 启动Express应用 在app.js或server.js文件中启动Express应用: ``` var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var userRoute = require('./routes/user'); app.use(bodyParser.json()); app.use('/api', userRoute); app.listen(3000, function() { console.log('Server listening on port 3000'); }); ``` 6. 测试API接口 通过Postman等工具测试API接口。例如: - GET http://localhost:3000/api/users - POST http://localhost:3000/api/users - GET http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - PUT http://localhost:3000/api/users/5f3e7003c3e1c12345678901 - DELETE http://localhost:3000/api/users/5f3e7003c3e1c12345678901 这样就完成了使用Node.jsExpressMongoose操作MongoDB的基本流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值