nodejs实战入门教程

项目目录

G:\FIR_NODE_APP
│  app.js//入口文件package.json//第三方依赖包管理文件,在根目录下运行cnpm init就有此文件
├─models
│      User.js//模型类(本案例以mongodb作为数据库,mongodb以模型类操作数据库)
├─public//静态文件包
│  │  main.css//css样式
│  └─js
│          index.js//处理html页面的业务逻辑
│          jquery-3.2.1.js
│          login.js
│
├─routers
│      admin.js
│      api.js//接口文件
│      main.js//页面的路由
├─schemas
│      users.js//mongoose.schema类,上面User.js就是基于此类进行操作,通过模型化该类进行数据库的增删改查
└─views
    └─main
            index.html
            login.html//页面
下面截个图更清楚目录结构

在这里插入图片描述

前期准备

要自行安装mongodb数据库和可视化工具,我用的可视化工具是Robo 3T 1.3.1(需要教程的请留言,过后给您献上博文)

开始上代码

app.js
let express = require('express')//在这里引入前要安装express,cnpm i express -S
let swig = require('swig')//安装swig,cnpm i swig -S
let mongoose = require('mongoose')//安装mongoose,cnpm i mongoose -S
let bodyParser = require('body-parser')//安装body-parser,cnpm i body-parser -S
// 解析 application/json,app.use(bodyParser.json()); 
// 解析 application/x-www-form-urlencoded,app.use(bodyParser.urlencoded());
let app = express()//创建应用
// app.use(bodyParser.json)
app.all("*",function(req,res,next){
    //设置允许跨域的域名,*代表允许任意域名跨域
    res.header("Access-Control-Allow-Origin","*");
    //允许的header类型,TOKEN或其他自定义登录态要在这里配置一下,前端才可以传递到后端来
    res.header("Access-Control-Allow-Headers","content-type,TOKEN");
    //跨域允许的请求方式 
    res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
    if (req.method.toLowerCase() == 'options')
        res.send(200);  //让options尝试请求快速结束
    else
        next();
})
app.engine('html',swig.renderFile)//html是处理的文件类型
app.set('views','./views')//./views就是html文件存放的地方
app.set('view engine','html')//html与上面的html要保持一直
app.use('/public',express.static(__dirname+'/public'))//静态文件存储的地方
swig.setDefaults({
    cache:false//页面不缓存
})
app.use(bodyParser.urlencoded({
    extended:true//后端获取前端的请求体,这样就可以通过req.body来获取前端传过来的数据
}))
app.use('/admin',require('./routers/admin'))//配置路由的路径
app.use('/api',require('./routers/api'))
app.use('/',require('./routers/main'))
// app.get('/',function(req,res,next){//通过app应用的方式配置路由
//     res.render('main/index')
// })
//<link rel="stylesheet" type="text/css" href="/main.css">
// app.get('/main.css',function(req,res,next){
//     res.setHeader('content-type','text/css');
//     res.send('body{background:red;}');
// })
mongoose.connect("mongodb://localhost:27017/config",{useNewUrlParser:true},function(err){//通过mongodb连接数据库,这里的config是数据库的名称,无需先创建,在连接的时候如果没有这个数据库,就会自动创建
    if(err){
        console.log("连接失败")
    }else{
        console.log("连接成功")
        app.listen(2000)
    }
})
User.js
var mongoose = require('mongoose')
var usersSchema = require('../schemas/users')//引入类
module.exports = mongoose.model('User',usersSchema)//模型化,通过此模型进行增删改查
index.js
$(function(){
    let timer
    $('input[type=button]').on('click',function(){
        $.ajax({
            type:'post',
            url:'/api/user/register',
            data:{
                username:document.getElementById('userName').value,//也可以通过jq的方式获取输入的内容
                password:document.getElementById('psd').value,
                conPsd:document.getElementById('conPsd').value
            },
            dataType:'json',
            success:(res)=>{
                    $('.dialog')[0].innerHTML = res.message
                    $('.dialog').css("display","inline-block")
                    timer = setTimeout(() => {
                        $('.dialog').css("display","none")
                        clearTimeout(timer)
                    }, 800);
                    if(res.code==200){
                        window.open('http://127.0.0.1:8088/login','_self')
                    }
            }
        })
    })
})
admin.js
let express = require('express')
let router = express.Router()//通过router配置路由,像上面一样,也可以通过app = express()来配置路由
router.get('/user',function(req,res,next){
    res.send('User')//向客户端发送数据
})
module.exports = router
api.js
var axios = require('axios')//安装axios,cnpm i axios -S
var express = require('express')
var router = express.Router()
var User = require('../models/User')//引入模型
var responseData;
router.use(function (req, res, next) {//三个参数莫漏掉
    responseData = {//默认返回的数据
        code: 0,
        message: ''
    }
    next()//不要漏了这个,漏了前后端就无法联系
})
router.get('/getusers',function(req,res){
    let users = User.find().then(result=>{//User模型就是一张表,在mongo中叫集合,行叫文档,增删改查每一行/条数据叫操作文档
        responseData.message = result//将数据库表中的所有users用户返回给前端
        res.json(responseData)
    })
})
router.post('/user/accross', function (req, res, next) {
    axios.post('http://www.baidu.com').then(result => {
        responseData.code = 200
        responseData.message = "result"
        res.json(responseData)//在router中再次发起axios请求,这是在服务器中发起的请求,服务器与服务器的请求没有跨域问题,更多知识可以去了解一下同源策略
    })
})
main.js
var express = require('express')
var router = express.Router()
router.get('/',function(req,res,next){
    res.render('main/index')//页面路由
})
router.get('/login',function(req,res,next){
    res.render('main/login')
})
module.exports = router
users.js
var mongoose = require('mongoose')
module.exports = new mongoose.Schema({
    username:String,
    password:String
})//这个类也就是数据库的一张表
其他知识

初学着可能有一个问题,cnpm i axios -S中的S到底是什么意思
-S也等于–save-dev//将依赖安装到上线环境和开发环境
-D也等于-dev//将依赖安装到开发环境

以上就是本教程的所有内容,如有其他疑问的敬请留言,谢谢支持
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值