Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS日期字符串vs对象错误_Javascript_Angularjs_Json_Mongodb_Date - Fatal编程技术网

Javascript AngularJS日期字符串vs对象错误

Javascript AngularJS日期字符串vs对象错误,javascript,angularjs,json,mongodb,date,Javascript,Angularjs,Json,Mongodb,Date,我试图检索一组用户信息(通过搜索firstname),它返回firstname和预订日期(在mongoDB中,mongoose模式使用date:date)。名字是type=text,预订日期是type=date。它返回未定义的日期,错误消息为错误:[ngModel:datefmt]预期'2017-11-06T16:00:00.000Z为日期。我阅读了其他问题/答案,这是因为type=date需要一个对象,但JSON返回一个字符串 我对Angular JS非常陌生,我尝试过建议的方法,但没有结果。

我试图检索一组用户信息(通过搜索firstname),它返回firstname和预订日期(在mongoDB中,mongoose模式使用date:date)。名字是type=text,预订日期是type=date。它返回未定义的日期,错误消息为错误:[ngModel:datefmt]预期'2017-11-06T16:00:00.000Z为日期。我阅读了其他问题/答案,这是因为type=date需要一个对象,但JSON返回一个字符串

我对Angular JS非常陌生,我尝试过建议的方法,但没有结果。我不知道少了什么。感谢基于我的代码的任何特定指针

HTML

服务

self.searchAllBookings = function (term) {
    var defer = $q.defer();

    $http.get("/api/booking?keyword=" + term).then(function (result) {
        console.log(result); //returns array but date undefined
        if (result.status == 200) {
            defer.resolve(result.data);
        } 
        else {
            defer.resolve(null);
        }

    }).catch(function (err) {
        console.log(err);
        defer.reject(err);
    });

    return defer.promise;
}     
服务器

app.get("/api/booking?", function (req, res) {

    console.log("Search booking > " + req.query.keyword);
    var keyword = req.query.keyword;

    Booking.find({ 
        "firstname" : new RegExp('^'+keyword+'$', "i")
    }, (err, result) => {
        if (err) {
            console.log(err);
        }
        res.status(200).json(result);

        console.log(result); 
        // { _id: 5a1a4e1238dfaa65e5fa59a2,
        //    firstname: 'Emily',
        //    date: 2017-11-20T16:00:00.000Z,
        //    __v: 0 },

        console.log(result[0].date); //2017-11-06T16:00:00.000Z

    });
});     

我假设
self.bookings
是一个数组。如果是这样,则需要在将字符串转换为日期之前循环它

如果日期未定义,则指定当前日期。否则,将字符串转换为日期

.then(function (result) {
    console.log(result); //returns array but date is undefined
    self.bookings = result;
    for(var i=0; i< self.bookings.length; i++){
       self.bookings[i].date = new Date(self.bookings[i].date) : Date.now())
    }


})
.then(函数(结果){
console.log(result);//返回数组,但日期未定义
self.bookings=结果;
对于(变量i=0;i
添加这一行后,我会记录self.booking.date,我确实得到了日期,但没有传递到服务(日期未定义)您想传递到服务还是在html中查看它?谢谢!成功了!我在我的代码中犯了一个错误,你的FOR语句是正确的@只需注意,您还可以从您的服务函数
searchAllBookings
返回$http.get调用的结果,而不是创建您自己的延迟($get函数返回一个HttpPromise,这与创建您自己的延迟对象时得到的常规承诺非常相似)创建您自己的服务对于缓存服务中的内容仍然很有用,但以防您没有注意到。@shaunhusain同意。因为http返回一个承诺,所以不需要创建一个新的承诺(使用defer对象)
app.get("/api/booking?", function (req, res) {

    console.log("Search booking > " + req.query.keyword);
    var keyword = req.query.keyword;

    Booking.find({ 
        "firstname" : new RegExp('^'+keyword+'$', "i")
    }, (err, result) => {
        if (err) {
            console.log(err);
        }
        res.status(200).json(result);

        console.log(result); 
        // { _id: 5a1a4e1238dfaa65e5fa59a2,
        //    firstname: 'Emily',
        //    date: 2017-11-20T16:00:00.000Z,
        //    __v: 0 },

        console.log(result[0].date); //2017-11-06T16:00:00.000Z

    });
});     
.then(function (result) {
    console.log(result); //returns array but date is undefined
    self.bookings = result;
    for(var i=0; i< self.bookings.length; i++){
       self.bookings[i].date = new Date(self.bookings[i].date) : Date.now())
    }


})