美文网首页
Node.js之增删改查和跨域问题

Node.js之增删改查和跨域问题

作者: println文 | 来源:发表于2020-04-17 11:35 被阅读0次

    增删改查

    server.js

    const http = require("http")
    const url = require("url")
    const routerModal = require("../router/index")
    
    const getPostData = (req) => {
        return new Promise((resolve, reject) => {
            if (req.method != "POST") {
                resolve({})
                return
            }
            let postData = ""
            req.on("data", chunk => {
                postData += chunk;
            })
            req.on("end", () => {
                // console.log(postData)
                resolve(JSON.stringify(postData))
            })
        })
    }
    
    const server = http.createServer((req, res) => {
        // 中文乱码
        res.writeHead(200, { "content-type": "application/json;charset=UTF-8" })
        getPostData(req).then((data) => {
            req.body=data;
            //调用路由的函数
            let resultData = routerModal(req, res);
            if (resultData) {
                // 解析为json数据
                res.end(JSON.stringify(resultData))
            } else {
                // 可以设置404页面为html
                res.writeHead(200, { "content-type": "text/html" })
                res.end("404 not found")
            }
        })
    })
    
    server.listen(3000, () => {
        console.log("监听3000端口...")
    })
    

    router.js

    const url = require("url")
    const { getUser, addUser, deleteUser, updateUser } = require("../controller/user.js")
    
    function handleRequest(req, res) {
        const urlObj = url.parse(req.url, true);
        console.log(urlObj);
        if (urlObj.pathname == "/api/getUser" && req.method == "GET") {
            let resultData = getUser();
            return resultData;
        } else if (urlObj.pathname == "/api/addUser" && req.method == "POST") {
            let resultData = addUser(req.body);
            return resultData;
        } else if (urlObj.pathname == "/api/deleteUser" && req.method == "POST") {
            let resultData = deleteUser(urlObj.query.id);
            return resultData;
        } else if (urlObj.pathname == "/api/updateUser" && req.method == "POST") {
            let resultData = updateUser(urlObj.query.id,req.body);
            return resultData;
        }
    }
    
    module.exports = handleRequest;
    

    controller.js

    module.exports={
        getUser(){
            return[
                {
                    id:1,
                    name:"steven",
                    age:24
                }
            ]
        },
        addUser(userObj){
            console.log(userObj);
            return{
                code:0,
                msg:"添加成功",
                data:null
            }
        },
        deleteUser(id){
            console.log(id);
            return{
                code:0,
                msg:"删除成功",
                data:null
            }
        },
        updateUser(id,userObj){
            console.log(id,userObj);
            return{
                code:0,
                msg:"更新成功",
                data:null
            }
        }
    }
    

    跨域问题

    浏览器同源策略:协议+域名+端口三者相同
    任一不同就是跨域

    // 设置允许跨域的域名,*代表任意域名允许
    res.setHeader("Access-Control-Allow-Origin","*");
    

    注意:正式服务器不要用*,应该用数组形式,否者接口共享.

    跨域2(express-generator)

    安装中间件

    npm install cors -S
    

    引入

    const cors=require('cors')
    app.use(cors())
    

    相关文章

      网友评论

          本文标题:Node.js之增删改查和跨域问题

          本文链接:https://www.haomeiwen.com/subject/eodevhtx.html