Я использую стек MEAN и пытаюсь извлечь информацию из объекта, но атрибуты меняются в зависимости от множества факторов, поэтому их не могут называть. Есть ли способ получить информацию по-другому? Данные будут использоваться для обновления различных вещей в моем монохромном режиме.извлекать содержимое из объекта, Nodejs
Простая информация о моей базе данных: 3 коллекции. Пользователи, годы, курсы.
Год: ID, UserID, курсы {courseid, класс,}
Курс: идентификатор, имя, кредиты и т.д.
Я сумел отправить информацию nodejs файл, но не может что-нибудь с этим делать. Ниже приведен результат консольного ввода информации. Как получить информацию из объекта, чтобы я мог обновлять мою базу данных?
Результат из журнала
Object {year: Object, grade: Object}
grade:Object
574d8ce6bfb4ea470a2e10c7:"3"
__proto__:Object
year:Object
574e8cf5ae8fc00917ded99b:true
__proto__:Object
Grade contains the id of the course for which I want to change the grade and the grade
I want to change to.
Year contains the Id of the year in which the course is stored.
дома/index.html
Ниже содержит только форму. Переменная year.XXX выполняет итерацию более года (Получено из базы данных).
year.course = {идентификатор: XX, оценка: YY}
theCourse перебирает все курсы в базе данных, чтобы получить информацию курса конкретного.
vm.change - это переменная, отправленная на контроллер.
<form>
<div class="panel-heading " ><b> YEAR {{year.year}}</b>
<label style="float: right;"> Edit
<input type="checkbox" id="year._id" value="year.id" ng-model="vm.change.year[year._id]"/>
</label>
<div><p>Sum of Credits: {{year.totalCredits}}</p></div>
</div>
<div class="panel-body hideyear" >
<div class="col-xs-12">
<h4>HT</h4>
<table class="table " >
<tr class="active" >
<th><b>Course code</b></th>
<th><b>Grade</b></th>
<th><b>Update Grade</b></th>
</tr>
<tbody ng-repeat= "course in year.courses">
<tr ng-repeat="theCourse in vm.courses" ng-if="theCourse._id==course.id && (theCourse.term=='HT1'||theCourse.term=='HT2')">
<td >{{theCourse.courseCode}}</td>
<td>{{course.grade}}</td>
<td ><select ng-disabled="!vm.change.year[year._id]" ng-model="vm.change.grade[course.id]">
<option disabled selected value> -- update grade -- </option>
<option value="NA">NA</option>
<option value="5">5</option>
<option value="4">4</option>
<option value="3">3</option>
<option value="G">G</option>
<option value="U">U</option>
</select></td>
</tr>
</tbody>
</table>
</div>
</div>
<button type="submit" class="btn btn-primary" ng-disabled="!vm.change.year[year._id]" ng-click="vm.saveChange(vm.change)">Save</button>
</div>
</form>
index.controller.js
function saveChange(change){
console.log(change)
}
EDIT
В файле с именем app.js VM к контроллеру, как и выбрать, какой контроллер использовать:
(function() {
'use strict';
angular
.module('app', ['ui.router'])
.config(config)
.run(run);
/*
Connects the right subpage with corresponding controller and url.
*/
function config($stateProvider, $urlRouterProvider) {
// default route
$urlRouterProvider.otherwise("/");
$stateProvider
.state('home', {
url: '/',
templateUrl: 'home/index.html',
controller: 'Home.IndexController',
controllerAs: 'vm',
data: { activeTab: 'home' }
});
}
Когда html загружается, контроллер собирает некоторую информацию из базы данных, которая используется на большинстве частей страницы.
function initController() {
// get current user
UserService.GetCurrent().then(function (user) {
vm.user = user;
});
//Gets all years in the database
YearService.GetAll().then(function (years) {
vm.years = years;
});
// Gets all courses in the databased.
CourseService.GetAll().then(function (courses) {
vm.courses = courses;
});
}
Все получает в initcontroller выше делает почти то же самое, так что я покажу процесс для одного из них, YearSevice.GetAll, называет приложение-сервис/year.service.js
(function() {
'use strict';
angular
.module('app')
.factory('YearService', Service);
function Service($http, $q){
var service = {};
service.GetAll = GetAll;
return service;
function GetAll() {
return $http.get('/api/year/getAll').then(handleSuccess, handleError);
}
с $ http.get мы идем через сервер на стороне сервера управления, year.controller.
var config = require('config.json');
var express = require('express');
var router = express.Router();
var YearService = require('services/year.service');
// routes
router.get('/getAll', getAll);
function getAll(req,res){
YearService.getAll()
.then(function(result){
if(result){
res.send(result);
}else{
res.sendStatus(404);
}
})
.catch(function(err){
res.status(400).send(err);
});
}
YearService.getAll вызывает серверные службы: services/year.services.js
var config = require('config.json');
var _ = require('lodash');
var Q = require('q');
var mongo = require('mongoskin');
//Connectionsstring to the mongo database, if the app is runed on openshift the connectionstring value will change.
var connectionString = "mongodb://localhost:27017/mean-stack-registration-login-example";
if(process.env.OPENSHIFT_MONGODB_DB_URL){
connectionString = process.env.OPENSHIFT_MONGODB_DB_URL + "studycontrol";
}
var db = mongo.db(connectionString, { native_parser: true });
db.bind('years');
db.bind('users');
db.bind('courses');
var service = {};
service.getAll = getAll;
module.exports = service;
function getAll(){
var deferred = Q.defer();
//
db.collection('years').find().toArray(function(err, result) {
if (err) deferred.reject(err);
deferred.resolve(result);
return deferred.promise;
});
return deferred.promise;
}
И коллекция возвращается всем способом html-кода. Отправка новой информации в базу данных имеет одинаковую структуру, но включает в себя объект, который должен быть отправлен с целым временем. В предыдущих случаях объект был легко построен, но теперь мне нужно отправить код курса, год-идентификатор и оценку, и я пытаюсь сделать это, используя флажок и выбор, поэтому три значения, но на двух «носителях».
что, к сожалению, не работает. класс получает идентификатор свойства, он получает свойство с именем так же, как и идентификатор курса, который я пытаюсь изменить. Таким образом, я не могу получить доступ к нему с помощью id, так как он изменяется в зависимости от того, какой курс я хочу изменить. Только консоль регистрирует его, потому что я хочу видеть содержимое atm, поэтому я могу выяснить, как продолжить. @Stian – Johanna
Тогда я не уверен, понимаю ли я вашу проблему на самом деле? Появилось, поскольку вы просто хотели использовать некоторую информацию, хранящуюся в объекте? –
Я хочу использовать информацию в объекте, но если вы посмотрите на консольный журнал в начале, вы увидите, что информация хранится таким образом, что я не могу использовать ie grade.id, чтобы получить его, поскольку свойство - это класс.574d8ce6bfb4ea470a2e10c7, где число соответствует идентификатору курса, который я хочу изменить в базе данных. Поэтому я хочу извлечь как 574d8ce6bfb4ea470a2e10c7, так и 3 из класса. @Stian – Johanna