Может кто-нибудь показать мне, как подключить смарт-контракт к Mongodb с рулем? - PullRequest
0 голосов
/ 23 апреля 2020
pragma solidity >=0.4.21 <0.7.0;

contract Student {

    string public fName;
    string public grade;

    event Students (
        string name,
        string grade
    );

    function setStudents(string memory _fName, string memory _grade) public {
        fName = _fName;
        grade = _grade;
    }

    function getStudents() public view returns (string memory, string memory) {
        return (fName, grade);
    }

}

Это мой умный контракт, и я хотел бы знать, как я могу хранить данные в mongodb. Мне нужно использовать MVC для моего проекта, поэтому он будет использовать рули.

Ниже приведен мой добавочный руль для создания.

<h3>{{viewTitle}}</h3>

<form action="/student" method="POST" autocomplete="off">
    <input type="hidden" name="_id" value="{{student._id}}">
    <div class="form-group">
        <label>Name</label>
        <input id="name" type="text" class="form-control" name="name" placeholder="Full Name" value="{{student.name}}">
    </div>
    <div class="form-group">
        <label>Grade</label>
        <input id="grade" type="text" class="form-control" name="grade" placeholder="Grade" value="{{student.grade}}">
    </div>
    <div class="form-group">
        <button id="button" type="submit" class="btn btn-info"><i class="fa fa-database"></i> Submit</button>
        <a class="btn btn-secondary" href="/student/list"><i class="fa fa-list-alt"></i> View All</a>
    </div>
</form>

Ниже приведен мой список рулей для отображения или восстановить данные.

<h3><a class="btn btn-secondary" href="/student"><i class="fa fa-plus"></i> Create New</a> Student List</h3>
<table class="table table-striped">
    <thead>
        <tr>
            <th>Full Name</th>
            <th>Grade</th>
        </tr>
    </thead>
    <tbody>
        {{#each list}}
        <tr>
            <td>{{this.name}}</td>
            <td>{{this.grade}}</td>
        </tr>
        {{/each}}
    </tbody>
</table>

Ниже находится контроллер.

const express = require('express');
var router = express.Router();
const mongoose = require('mongoose');
const Student = mongoose.model('Student');

router.get('/', (req, res) => {
    res.render("student/add", {
        viewTitle: "Insert Student"
    });
});

router.post('/', (req, res) => {
    insertRecord(req, res);
});


function insertRecord(req, res) {
    var student = new Student();
    student.name = req.body.name;
    student.save((err, doc) => {
        if (!err)
            res.redirect('student/list');
        else {
            console.log('Error during record insertion : ' + err);
        }
    });
}

router.get('/list', (req, res) => {
    Student.find({}).lean()
        .exec(function(err, docs) {
        if (!err) {
            res.render("student/list", {
                list: docs
            });
        }
        else {
            console.log('Error in retrieving student list :' + err);
        }
    });
});

module.exports = router;

Если кто-нибудь может показать мне, как это сделать, я действительно ценю это.

...