首页 > 解决方案 > 如何修复错误 ERR_CONNECTION_TIMED_OUT?

问题描述

这是我的 App.js 文件(客户端):

import React,{useContext,useState} from 'react'
import {Button,Form} from 'semantic-ui-react' 
import axios from 'axios'
import { useAlert } from 'react-alert'

import {AuthContext} from '../context/auth'

export default function Register(props) {
    const context = useContext(AuthContext)
    const [values,setValues]=useState({
        name:'',
        email:'',
        password:''
    })

    const [errors,setErrors]=useState({});
   
    const alert = useAlert()

    const onChange=(e)=>{
        setValues({...values,[e.target.name]:e.target.value})
    }

    const onSubmit=(e)=>{
        e.preventDefault();
        console.log(values);
        axios.post('http://54.83.252.172:5000/api/v1/register',values)
        .then(resp=>{
            if(resp.data.msg==="User successfully created"){
                context.login(values);
                alert.show(<div style={{ color: 'green' }}>"Successfully Registered"</div>)
                props.history.push('/') 
            }else{
                alert.show(<div style={{ color: 'red' }}>"Enter valid details"</div>)
            }
                     
        })
        .catch(err=>{
            alert.show(<div style={{ color: 'red' }}>"Enter a Valid Email, username, password "</div>)    
        })
    }

    return (
        <div className="form-container">
            <Form onSubmit={onSubmit} noValidate>
                <h1>Register</h1>
                <Form.Input
                  label='Username'
                  placeholder="name.."
                  name="name"
                  value={values.username}
                  onChange={onChange}  required />
                  <Form.Input
                //   type='email'
                  label='Email'
                  placeholder="Email.."
                  name="email"
                  value={values.email}
                  onChange={onChange}  required/>
                  <Form.Input
                //   type='password'
                  label='password'
                  placeholder="password.."
                  name="password"
                  value={values.password}
                  onChange={onChange} required/>

                  <Button type="submit" primary>
                      Register
                  </Button>
                 </Form>

                  {Object.keys(errors).length>0 &&(
                    <div className="ui error message">
                     <ul className="list">
                        {Object.values(errors).map(value=>(
                            <li key={value}>{value}</li>
                        ))}
                     </ul>

                 </div>
                  )}

                 
        </div>
    )
}

这是我的 main.py 文件(服务器端):

from flask import Flask,jsonify,request, render_template,jsonify
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import and_,or_,exists
from flask_cors import CORS,cross_origin
#import Model
import datetime
from sqlalchemy.orm import validates,backref, lazyload
from werkzeug.security import (generate_password_hash, 
  check_password_hash)
import re
import os
from flask_marshmallow import Marshmallow,Schema,fields
from marshmallow import Schema,fields



app = Flask(__name__)
#cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
CORS(app)

#basedir=os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///C:/Program Files/nodejs/React-App/backend/data.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False


db = SQLAlchemy(app) # Khoi tao sqlalcemy
ma = Marshmallow(app) # khoi tao Marshmallow


#user model
class User(db.Model):
    blogposts=db.relationship('Blogpost',backref='blog_owner')
    user_id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(100),index=True,unique=True)
    email=db.Column(db.String(100),unique=True,index=True)
    password=db.Column(db.String(100),unique=True)
    created_on = db.Column(db.DateTime, server_default=db.func.now())

    # def set_password(self, password): 
    #   self.password = generate_password_hash(password) 
    
    @validates('name') 
    def validate_username(self, key, name):
        if not name:
            raise AssertionError('No username provided')
        if User.query.filter(User.name == name).first():
            raise AssertionError('Username is already in use')
        if len(name) < 5 or len(name) > 20:
            raise AssertionError('Username must be between 5 and 20 characters') 
        return name 
    @validates('email') 
    def validate_email(self, key, email):
        if not email:
            raise AssertionError('No email provided')
        if not re.match("[^@]+@[^@]+\.[^@]+", email):
            raise AssertionError('Provided email is not an email address') 
        return email  
       

    def __init__(self,name,email,password):
        self.name=name
        self.email=email
        self.password=password      



# Blog model one to many association
class Blogpost(db.Model):
     id=db.Column(db.Integer,primary_key=True)
     post=db.Column(db.String(100),nullable=True)
     blog_owner_id=db.Column(db.Integer,db.ForeignKey('user.user_id'))
     created_on = db.Column(db.DateTime, server_default=db.func.now())

     def __init__(self,post,blog_owner_id):
         self.post=post  
         self.blog_owner_id=blog_owner_id     
# --------------------------------------------------------------            

class BlogSchema(ma.Schema):
    class Meta:
       
        fields=("id","post","blog_owner_id","created_on")

blog_schema= BlogSchema(many=True)

# user Schemal
class UserSchema(ma.Schema):
        user_id=fields.Integer()
        name = fields.Str()
        email = fields.Str()
        password=fields.Str()
        blogposts=ma.Nested(blog_schema,many=True)
        created_on=fields.DateTime()


# init schema
user_schema = UserSchema()
users_schema= UserSchema(many=True)



# GET,POST,PUT,PATCH,DELETE

@app.route('/', methods=['GET'])
def index():
   return "hello!"

@app.route("/home", methods=['GET'])
def home():
    return render_template("index.html")

@app.route('/abc',methods=['GET','POST'])
def abc():
   a = {
       "CustomerID":1,
       "name":"lvminh"
   }
   return jsonify(a)

@app.route('/api/v1/register',methods=['POST'])
@cross_origin()
def add_user(): 
    data = request.get_json()
    name = data['name']
    password = data['password']
    email = data['email']
    
    new_user=User(name=name,email=email,password=password)
    try:
            db.session.add(new_user)
            db.session.commit()
            return jsonify(msg='User successfully created'), 200
    except AssertionError as exception_message: 
            return jsonify(msg='Error: {}. '.format(exception_message)), 400    

@app.route('/api/v1/login',methods=['POST'])
@cross_origin()
def userlogin():
    email=request.json['email']
    password=request.json['password']
    # db.session.query(db.exists().where(User.email == email and User.password== password))
    if  email and password != "":
        all_user=User.query.all()
        for u in all_user:
            if(u.email==email and u.password==password):
                return jsonify({"status":"User exists","username":u.name})
    return jsonify({'msg':'no user exists '})    

# all users
@app.route('/api/v1/users',methods=['GET'])
def get_users():
    all_user=User.query.all()
    result=users_schema.dump(all_user)
    return jsonify(result)

@app.route('/api/v1/user/<user_id>',methods=['GET'])
def get_user(user_id):
    only_user=User.query.get(user_id)
    return user_schema.jsonify(only_user)    


@app.route('/api/v1/user/<user_id>',methods=['PUT'])
def update_user(user_id):
    user = User.query.get(user_id)
   # name=request.json['name']
    email=request.json['email']
    # user.name=name
    user.email=email   
    db.session.commit()
    return user_schema.jsonify(user) 


# Deleting a user
@app.route('/api/v1/user/<user_id>',methods=['DELETE'])
def delete_user(user_id):
    only_user=User.query.get(user_id)
    # blog_data=Blogpost.query.get()
    db.session.delete(only_user)
    db.session.commit()
    return user_schema.jsonify(only_user)        
    
# --------------------------------------------------------------
# posts of specific user
@app.route('/api/v1/users/<user_id>',methods=['POST'])
def posts(user_id):
    post=request.json['post']
    if request.method=='POST':
        if post!='':
          new_post=Blogpost(post,user_id)
          db.session.add(new_post)
          db.session.commit()
          return user_schema.jsonify(User.query.get(user_id)) 
    return jsonify("Post is empty")  

@app.route('/api/v1/users/allblogs',methods=['GET'])
def blogs():
    allblogs=Blogpost.query.all()
    result=blog_schema.dump(allblogs)
    return jsonify(result)



@app.route('/api/v1/users/blog/<user_id>',methods=['GET'])
def userblogs(user_id):
   
    userblogs=Blogpost.query.filter_by(blog_owner_id=user_id).order_by(Blogpost.id.desc()).all()
    result=blog_schema.dump(userblogs)
    return jsonify(result)

            
if __name__ == '__main__':
    db.create_all()
    app.run(port=5000,host="0.0.0.0",debug=True)

当我开始反应应用程序和应用程序烧瓶,连接,数据库没有问题但是当我按下订阅按钮时,没有数据发送到我的数据库,并且我的 Chrome 开发人员工具中有这些消息:

POST http://54.83.252.172:5000/api/v1/register net::ERR_CONNECTION_TIMED_OUT

请问我能做些什么来解决这个问题?

标签: node.jsflaskrest

解决方案


您可以将 .db 文件移动到与烧瓶应用程序相同的目录并将您的 db uri 更新为:

app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///data.db'

推荐阅读