主頁 > 軟體工程 > 當我將資料庫暫存器推送到Json-server到users.json時,我做錯了什么。我有404未找到

當我將資料庫暫存器推送到Json-server到users.json時,我做錯了什么。我有404未找到

2021-12-19 18:53:30 軟體工程

我是 ReactJs 編碼的新手,我看過一些關于假 JSON-Server 的視頻,但我不知道如何通過“server.js”將 register.js 中的所有資料發布到我的“users.json”。

我所做的是我有一個編輯 "package.json" "script": "auth": "node server.js" 和 npm i json-server, npm i json-server jsonwebtoken body-parser --save-dew 和 npm運行 auth 以運行 server.js 我在 youtube 上學到了這個...

這是我的源代碼。有人可以修復我錯誤的“帖子”,謝謝!

用戶.json

{
    "users": [
      { 
        "id": 1 
        "username":"admin",
        "email": "[email protected]",
        "phone": "01234",
        "pass": "admin1234",
        "gender":"female",
        "role":"shop"
      }
    ]
  }

服務器.js

const fs = require("fs"); 
const bodyParser = require("body-parser");
const jsonServer = require("json-server");
const jwt = require("jsonwebtoken");


const server = jsonServer.create();
const userdb = JSON.parse(fs.readFileSync("./database/users.json", "utf-8"));
server.use(bodyParser.urlencoded({extended: true}));
server.use(bodyParser.json());
server.use(jsonServer.defaults());

const SECRET_KEY = "85423112"; //*random key to see access-token
const expiresIn = "1h";

function createToken(payload) {
    return jwt.sign(payload, SECRET_KEY, {expiresIn});
}
function isLoginAuthenticated({username, password}) {
    return (
        userdb.users.findIndex((user) => user.username === username && user.pass === password) !== -1 
    ); ?
}
function isSignupAuthenticated({username}) {
    return (
        userdb.users.findIndex((user) => user.username === username ) !== -1);}
   
server.post("api/auth/register", (req,res)=>{
    const {username,email,phone,password, gender,role} = req.body;
    if(isSignupAuthenticated({username})){
        const status = 401;
        const message = "Username already taken";
        res.status(status).json({status,message}) //*taken err will appeare in web console
        return;
    }

    fs.readFile(".database/users.json", (err, data) => {
        if(err){
             const status = 401;
             const message = "err"; 
             res.status(status).json({status,message}) //*err when read file in system will appeare in web console
             return;
        }
         data = JSON.parser(data.toString()); 
        let last_item_id = data.users[data.user.length - 1].id;

        data.users.push({id: last_item_id  1, username:username,email:email,phone: phone, pass:password,  gender:gender, role:role });
        let writeData = fs.writeFile("./database/users.json", JSON.stringify(data), (err, result)=>{
            if (err) {
                const status = 401;
                const message = "err"; 
                res.status(status).json({status,message}) 
                return;
            }
        });
    });
    const access_token = createToken({username,password});
    res.status(200).json({access_token}); //* set status to be OKKKKK when create account success =)))
});

   server.post("/api/auth/login", (req,res)=>{
    const {username,password} = req.body;
    if(!isLoginAuthenticated({username,password})){
        const status = 401;
        const message = "Incorrect Username or Password";
        res.status(status).json({status,message}) //*wrong will appeare in web console
        return;
   }
   const access_token = createToken({username,password});
   res.status(200).json({access_token}); //* set status to be OKKK when login ok =)))
 });
 server.listen(5001, ()=>{
     console.log("running json api server");
 });

注冊.js

import React, {useState} from 'react'
import '../styles/Signup.css'
import axiox from "axios";
import {useHistory, Link} from 'react-router-dom'
import VisibilityIcon from '@mui/icons-material/Visibility'
import VisibilityOffIcon from '@mui/icons-material/VisibilityOff'
function Register() {
  const [username,setUsername]= useState("");
  const [password,setPassword]= useState("");
  const [email,setEmail]= useState("");
  const [phone,setPhone]= useState("");
  const [gender,setGender]= useState("");
  const [role,setRole]= useState("");
  const [error, setError]= useState("");  
  let history = useHistory();


  const [showPass,setshowPass]= useState(false);    
  const [showconfirmPass,setshowconfirmPass]= useState(false);    

const register = (e) => {
  e.preventDefault();
  axiox.post("http://localhost:5001/api/auth/register", 
  {username,
  email,
  phone,
  password,
  gender,
  role,

    }).then((response)=> {
      console.log("response", response)
      localStorage.setItem("login", JSON.stringify({
     userLogin: true,
      token: response.data.access_token,
      }));
    setError("");
    setUsername("");
    setEmail("");
    setPhone("");
    setPassword("");
    setGender();
    setRole();
     history.push("/login");
    }).catch(error =>setError(error.response.data.message));
  };
    return (
       <div>
         <div id="getstarted">Get started</div>
<div id="intro"><span>Sign up</span> to our website and start to explore your unique style today !</div>
<div class="center">
      <form onSubmit={register}>
  
        <div class="txt_field">
          <input type="text" required
           value={username} 
           onChange={(e)=> setUsername(e.target.value)}/>
          <span></span>
          <label>Username</label>
        </div>
        
          <div class="txt_field">
          <input type="text" required
          value={email} 
          onChange={(e)=> setEmail(e.target.value)}/>
          <span></span>
          <label>Email</label>
        </div>
          
          <div class="txt_field">
          <input type="text" required
          value={phone} 
          onChange={(e)=> setPhone(e.target.value)}/>
          <span></span>
          <label>Phone number</label>
        </div>
          
        <div class="txt_field">
          <input type={showPass ?"text":"password" }required
          value={password} 
          onChange={(e)=> setPassword(e.target.value)}/>
          <span></span>
          <label>Password</label>
        </div>
        <div class="password1" onClick={()=>{if(showPass == true){setshowPass(false)}else {setshowPass(true)}}}> 
                 {showPass ? <VisibilityIcon/> : <VisibilityOffIcon/>}
        </div>
          <div class="txtfield_1">
          <input type={showconfirmPass ?"text":"password" } required/>
          <span></span>
          <label>Confirm Password</label>  
        </div>
        <div class="confirm"  onClick={()=>{if(showconfirmPass == true){setshowconfirmPass(false)}else {setshowconfirmPass(true)}}}> 
                 {showconfirmPass ? <VisibilityIcon/> : <VisibilityOffIcon/>}

          {error && <p2 style={{
          color:"red",
           position:"absolute",
           top:"580px", width:"500px", left:"15vw"
           }}>{error}</p2>}

        </div>
          <div id="general">
          <div class="signup_link">
          Already have an account? <Link to="/login">Sign in</Link>
        </div>
        <input type="submit" value="Learn More"/>
        </div>
      </form>
    </div>
    
    <div id="rightside">
    <div id="sex">Sex</div>
    <div id="button">

        <input type="radio" name="gender" value={gender =="male"} onChange={(e)=> setGender(e.target.value)}/>
        <label for="male"></label>
        <span>Male</span>
        <input type="radio" name="gender" value={gender =="female"} onChange={(e)=> setGender(e.target.value)}/>
        <label for="female"></label>
        <span>Female</span>
    </div>
    <div class="rect1">
      <button class="button" type="button" value={role == "shop"} onChange={(e)=> setRole(e.target.value)}><img src={process.env.PUBLIC_URL   `/Images/shop 1.png`} /></button>
    </div>
    <div class="rect2">
      <button class="button" type="button" value={ role == "customer"} onChange={(e)=> setRole(e.target.value)}> <img src={process.env.PUBLIC_URL   `/Images/take-away.png`} /></button>
      </div>
      </div>
      </div>
    );
    }
export default Register

uj5u.com熱心網友回復:

你應該從改變你的路線server.post("api/auth/register", (req,res)=>{,以server.post("/api/auth/register", (req,res)=>{server.js檔案

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386071.html

標籤:节点.js 反应 json json服务器

上一篇:如何在chart.js中在餅圖上方顯示標簽

下一篇:如何在ReactNative的堆疊導航器中更改后退按鈕影像?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more