2016-06-23 3 views
1

Я пытаюсь удалить документ из MongoDB с помощью nodeJS.MongoDB _id length as as 25

Мой поток кода выглядит следующим образом: 1. Пользователь может удалить конкретного учащегося. 2.So Я вытащил все документы студента из БД и сохранил в объекте студентов. 3. Пользователь может фильтровать поиск с предоставленным текстовым полем и может выбрать конкретного учащегося и может удалить его.

Пожалуйста, найдите ниже UI:

UI

HTML-страницы, как показано ниже:

<h2 align="center">Delete Student</h2> 
<div ng-controller="deleteStudentController"> 
<form ng-submit="deleteStudent()"> 
    Student Name:<input type="text" letters-only ng-model="searchName"/><br> 
    <div ng-repeat="student in students | filter:searchName" ng-show="searchName.length"> 
     <input type="radio" ng-model="$parent.studentRadio" name="studentRadio" value="{{student._id}}"/>{{student | formatter}} 
    </div> 
    <input type="submit" value="Delete Student"/> 
    {{output}} 
    </form> 
    </div> 

Контроллер angularJS связан с пользовательским интерфейсом, как показано ниже:

mainApp.controller("deleteStudentController", function($scope,$http) { 
var resData = {}; 
$scope.student = {}; 
var urlGet = "/students/all"; 
$http.get(urlGet) 
.then(function(response) { 
    $scope.students = angular.fromJson(response.data); 
}); 
$scope.deleteStudent = function(){ 
    var urlDelete = "/students/remove:"+$scope.studentRadio; 
    $http.delete(urlDelete) 
    .success(function(response, status, headers, config){ 
     $scope.output = "Student successfully deleted."; 
    }) 
    .error(function(response, status, headers, config){ 
     $scope.output = "Error in processing. Please try again."; 
    }); 
    } 
    }); 

Какой inturn вызывает контроллер узла:

router.delete("/remove:studId", function(req,res){ 
Students.remove(req.params.studId, function(err) { 
    if (err) { 
     throw err; 
    } 
    else { 
     var respOut = "Student deleted"; 
     res.send(respOut); 
    } 
}); 
}); 

Внутри контроллера есть объект студенческой модели, в котором производится связь БД. Я использовал mongodb.ObjectID.createFromHexString() метод для создания ObjectId от значения _ID, что я получил от DB

студента кода модели для удаления документа:

exports.remove = function(studentId, cb) { 
var collection = db.get().collection('students'); 
console.log("_id"+studentId); 
console.log("Length---->"+studentId.length); 
collection.remove({_id: mongodb.ObjectID.createFromHexString(studentId)}, function(err) { 
    if (err) { 
     throw err; 
    } 
    else { 
    cb(err); 
    console.log("Record deleted."); 
    } 
}); 
} 

Но ее давая ошибку в «Ошибка: аргумент, переданный в, должен быть одной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов». Поэтому я попытался записать значение _id, которое я получил из документа студента DB и его длины. Удивительно, но я получаю длину «25».

Пожалуйста, найдите ниже консоли, что я получаю:

_id: 576aba09090560f80bd2caaa длина ----> 25

Любая идея об этой проблеме? Пожалуйста, помогите .....

+0

Длина _id выше 24. Что такое 'studentId'? Как вы его получите? – freakish

+0

есть. Но я получаю длину как 25. Я сделал консоль: console.log («Длина ---->» + studentId.length); Не знаю, почему его предоставление как длина 25. :( –

+0

@JohnyHK Я обновил свой вопрос. Не могли бы вы посмотреть? Пожалуйста, дайте мне знать, если мне нужно предоставить что-нибудь. –

ответ

2

Ваш Угловая код устанавливает конечную точку, как это:

"/students/remove:"+$scope.studentRadio 

Я предполагаю, что вы хотите : быть там, так что URL будет выглядеть примерно так:

/students/remove:576c1d4781aaa4f16a68af24 

Ваш Экспресс маршрут выглядит следующим образом:

router.delete("/remove:studId", ...) 

: - специальный символ в экспресс-маршрутах (он объявляет named parameter под названием studId). Это означает, что ваш маршрут займет все после /remove, чтобы быть значением studId, включая двоеточие, указанное в URL-адресе. Таким образом, req.params.studId - :576c1d4781aaa4f16a68af24, длина которого составляет 25 символов.

Если вы хотите использовать этот вид схемы URL, вы должны сделать двоеточие быть частью матча, убегая его (так оно теряет свой особый смысл):

router.delete("/remove\\::studId", ...) 
+0

Спасибо, человек. Это сработало для меня. –

Смежные вопросы