Node.js 配合express使用 搭建接口解决跨域

node.js就是javascript语言    先package.json   不废话

{
"name": "node_app",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
"@alicloud/sms-sdk": "^1.0.3",
"async": "^2.6.0",
"body-parser": "^1.18.2",
"cookie-parser": "^1.4.3",
"express": "^4.16.2",
"mongodb": "^2.2.33",
"supervisor": "^0.12.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node app.js"
},
"author": "",
"license": "ISC",
"description": ""
}

@alicloud/sms-sdk 接口是 阿里云短信接口模块

async 使用并行有关联可以使逻辑代码更清晰

body-parser cookie-parser 获取参数

express 脚手架必备

mongodb 数据库

supervisor 保存后自动重启服务


cnpm i 后 编写代码

下面是我的目录结构


登陆注册的逻辑专门写在login里 商品的逻辑写在good里 app只写接口和向前段发送数据

先写连接数据库

在db.js里面

const mongodb = require( "mongodb");

const MongoClient = mongodb. MongoClient;

const DB_CONN_STAR = "mongodb://localhost:27017/meihua"; // localhost:27017数据库连接地址 meihua数据库名称

module. exports = {
conn: function( callback){
MongoClient. connect( DB_CONN_STAR,( err, db) =>{
if( err){
console. log( "数据库连接失败");
callback( err, null);
} else{
console. log( "数据库连接成功");
callback( null, db);
}
})
}
}

下面是app.js代码


const express = require( "express");
const app = express();
const dbs = require( "./db");
var async = require( "async");

const host = "0.0.0.0"; //表示什么接口都可访问 写内网地址
const port = "4000"; //端口



var cookieParser = require( 'cookie-parser'); // 方便操作cookies
var bodyParser = require( 'body-parser'); // 获取 请求的参数 post

app. use( bodyParser. json()); // 接口 http://localhost:7000/login?username=qwer ajax req.body
app. use( bodyParser. urlencoded({ extended: false })); // form 表单提交
app. use( cookieParser());


//万能解决跨域办法
app. all( '*', function( req, res, next){
// res.header("Access-Control-Allow-Headers","Access-Control-Allow-Headers")
res. header( "Access-Control-Allow-Origin", "*");
res. header( "Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
res. header( "Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res. header( "X-Powered-By", ' 3.2.1');
next();
});

//访问根基目录下的html静态文件

// const path = require("path");
// app.use("/html",express.static(path.join(__dirname,"html")));

//引入login文件夹的模块方法逻辑
var regConfirm = require( "./login/regconfirm.js");
var register = require( "./login/register.js");
var login = require( "./login/login.js");
var finConfirm = require( "./login/finConfirm.js");
// var changepwd = require("./login/changepwd.js");

app. get( "/",( req, res) =>{
res. send( "连接成功");
})

接口 //注册 验证码接口

app. post( "/user/confirm",( req, res) =>{
var { tel} = req. body;
console. log( tel)
var code = Math. round( Math. random()* 9000 + 1000);
dbs. conn(( err, db) =>{
if( err) throw err;
regConfirm. func( db , { tel, code} ,( result) =>{
res. json( result);
db. close();
})
})
})

//register的逻辑
app. post( "/user/register",( req, res) =>{
var { tel, pwd} = req. body;
console. log( tel)
console. log( req. body)

dbs. conn(( err, db) =>{
if( err) throw err;
register. func( db,{ tel, pwd},( result) =>{
res. send( result);
db. close();
})
})
})
//监听

app. listen( port, host,() =>{
console. log( `the srever is running at http:// ${ host } : ${ port } ` )
})



login目录

regConfirm.js代码 说不清楚逻辑都写在上面自己看  太长了选择用csdn官方编译器

//confirm的逻辑
//判断手机号码是否存在 
// 1,存在则返回code  2,不存在 请注册  返回编码 “1”  存在 输入验证码后 选择是否找回密码或者更换手机号码“2”
// 返回 “0” 服务器错误
//不论如何  都会更新数据库 手机号码

const SMSClient = require('@alicloud/sms-sdk');
const accessKeyId = 'XXXXXXXXXX';//   自己注册的id
const secretAccessKey = 'XXXXXXXXXXXXX';  //注册短信接口mi
const  async = require("async");

    regConfirm = (db,{tel,code},callback) => {
        var telcode = db.collection("telcode");
        var user = db.collection("user");
        async.waterfall([
            function(callback){
                //查询是否存在 "1"发送短信成功  "2"发送短信失败 "3"已经注册过
                user.find({usertel:tel},{}).toArray((err,result)=>{
                    console.log(tel+"---------")
                    if(err) throw err;
                    if(result.length>0){
                        console.log("已经注册过")                        
                        callback(null,"3"); 
                    }else{
                        console.log("没有注册过,发送短信");

                        let smsClient = new SMSClient({accessKeyId, secretAccessKey});
                        smsClient.sendSMS({
                            PhoneNumbers: tel,
                            SignName: 'XXXXXXX',//自己注册的模版名字
                            TemplateCode: 'XXXXXXXX', //自己注册的模版id
                            TemplateParam: `{"code":${code}}` //随机自己生成的验证码
                            }).then(function (res) {
                                let {Code}= res;
                                if (Code === 'OK') {
                                console.log("短信发送成功")
                                callback(null,"1");  
                                }
                            }, function (err) {
                                console.log("短信发送失败" + err)
                                callback(null,"2");  
                            })
                    }
                })
            },
            function(arg,callback){
                if(arg == "1"){
                    //可以新增  判断手机号码是否已经发送过验证码  "1" 不存在新增    "2"存在修改  "3"短信发送失败  "4"已经注册过
                    telcode.find({tel},{}).toArray((err,result)=>{
                        if(err) throw err;
                        if(result.length>0){
                        callback(null,"2",code);  
                        }else{
                        callback(null,"1",code); 
                        }
                    })
                }else if(arg == "2"){
                callback(null,"3",code);
                }else{
                callback(null,"4",code);
                }
            },function(arg1,arg2,callback){
                //type "1"
                switch(arg1){
                    case "1"://不存在  新增
                    console.log("没发过验证码");
                    telcode.insert({tel,code},(err,info)=>{
                        if(err) throw err;
                        var obj = {
                            code,
                            type:1,
                            msg:"验证码已发送"
                        };
                        callback(null,obj);
                        })
                        break;
                    case "2"://存在 修改
                    console.log("发过验证码");
                    telcode.update({tel},{$set:{code:code}},(err,info)=>{
                        if(err) throw err;
                        var obj = {
                            code,
                            type:1,
                            msg:"验证码已发送"
                        };
                        callback(null,obj);
                        })
                        break;
                    case "3"://验证码发送失败
                        console.log("验证码发送失败");
                        var obj = {
                            code,
                            type:2,
                            msg:"验证码发送失败"
                        };
                        callback(null,obj);
                        break;
                    case "4"://用户存在 是否找回密码
                        console.log("用户存在 是否找回密码")
                        var obj = {
                            code,
                            type:3,
                            msg:"用户已注册,是否找回密码"
                        };
                        callback(null,obj);
                        break;
                }
            }   
        ],function(err,result){
            // "1"发送验证码  "2"验证码发送失败 "3"用户注册过,是否找回密码
            console.log(result)
            if(err) throw err;
            callback(result);
        })
    }



exports.func = regConfirm;

register.js代码


register = (db,{tel,pwd},callback) =>{
    var user = db.collection("user");
    user.insert({usertel:tel,userpwd:pwd},(err,info)=>{
        if(err) throw err;
        console.log("新增成功")
        callback(true)
    })

}

exports.func = register;

//数据库  简单数据查询

app.get("/find",(req,res)=>{
    dbs.conn((err,db)=>{
        if(err) throw err;
        var find = db.collection("find");
        find.find({}).toArray((error,result)=>{
            if(error) throw error;
            console.log("find数据获取")
            res.send(result);
            db.close();
        })
    })
})


逻辑代码 和  接口分开写 更利于管理如果借口很少就没有必要了   我这个是最简单的node  感觉比php简单一些

最后推到线上就可以了 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值