Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 通过express only返回路径请求mongo数据库_Javascript_Angularjs_Mongodb_Express - Fatal编程技术网

Javascript 通过express only返回路径请求mongo数据库

Javascript 通过express only返回路径请求mongo数据库,javascript,angularjs,mongodb,express,Javascript,Angularjs,Mongodb,Express,我一直在研究这个websocket函数,它调用mongodb来返回我用“get”存储的一些数据 const User = require('mongoose'); const express = require('express'); const cal = require('../../app/models/data.server.model.js'); const d = require('../../app/routes/data.server.routes.js'); const dat

我一直在研究这个websocket函数,它调用mongodb来返回我用“get”存储的一些数据

const User = require('mongoose');
const express = require('express');
const cal = require('../../app/models/data.server.model.js');
const d = require('../../app/routes/data.server.routes.js');
const data = require('./data.server.controller');

module.exports = function(app) {
require('express-ws')(app);


app.ws('/', function (ws, req) {                                                    //webSocket callback function
    ws.on('message', function (msg) {
        console.log("Message received from client: %s", msg);
        if (msg == "Update" || msg == "update") {

            const calendar = app.route('/api/data').get();                 //Query mongoose, return events.

            console.log(calendar);
            ws.send("fromJSON " + JSON.stringify(calendar));

        }
    });
});
})

这将使用此功能进行路由:

module.exports = function(app) {
  app.route('/api/data')
     .get(data.list)
     .post(users.requiresLogin, data.create);
最后应该呼吁:

exports.list = function(req, res) {
  Data.find().sort('-created').populate('creator', 'firstName lastName fullName').exec((err, datas) => {
    if (err) {
      return res.status(400).send({
        message: getErrorMessage(err)
      });
    } else {
      res.status(200).json(datas);
    }
  });
};
并返回我的数据

然而,我在变量“calendar”中得到的只是一个JSON对象,其“path”(与“api/data”路径相同)、“stack”和“methods”为空


我知道数据在那里,因为我可以用一些AngularJS代码访问它,但我不太确定如何在这里访问它。任何帮助都将不胜感激,如果我在任何地方有点含糊,请告诉我。提前谢谢

问题在于,您试图像使用同步方法一样使用异步方法。当您发送WS-message时,实际上还没有数据

我不确定这是否是呼叫路由处理程序的最佳选择。我会把代码改成这样:

...
// In your model static methods you can do a method that will return data
// You use arrow function, so ES6 is okay. Then you can use Promises 
// to avoid callbacks. Mongoose supports Promises by default.
// 
getData () {
    return this
        .find()
        .sort('-created')
        .populate('creator', 'firstName lastName fullName')
        .exec();
}
exports.list = (req, res) => {
    Data
        .getData()
        .then(data => res.status(200).json(data))
        .catch(err => {
            res.status(400).send({
                message: getErrorMessage(err)
            });
        })
}
然后
list
方法将如下所示:

...
// In your model static methods you can do a method that will return data
// You use arrow function, so ES6 is okay. Then you can use Promises 
// to avoid callbacks. Mongoose supports Promises by default.
// 
getData () {
    return this
        .find()
        .sort('-created')
        .populate('creator', 'firstName lastName fullName')
        .exec();
}
exports.list = (req, res) => {
    Data
        .getData()
        .then(data => res.status(200).json(data))
        .catch(err => {
            res.status(400).send({
                message: getErrorMessage(err)
            });
        })
}
对于WebSocket,您可以从模型中调用方法:

app.ws('/', function (ws, req) {                                                    //webSocket callback function
ws.on('message', function (msg) {
    console.log("Message received from client: %s", msg);
    if (msg == "Update" || msg == "update") {

        Data
           .getData()
           .then(data => {
               console.log(data);
               ws.send("fromJSON " + JSON.stringify(calendar));
           })
           .catch(/*Handle errors here*/);

    }
});
}))


或者您可以直接调用
Data.find().sort('-created')…
,而不将其封装到方法中。

问题在于,您试图像同步方法一样使用异步方法。当您发送WS-message时,实际上还没有数据

我不确定这是否是呼叫路由处理程序的最佳选择。我会把代码改成这样:

...
// In your model static methods you can do a method that will return data
// You use arrow function, so ES6 is okay. Then you can use Promises 
// to avoid callbacks. Mongoose supports Promises by default.
// 
getData () {
    return this
        .find()
        .sort('-created')
        .populate('creator', 'firstName lastName fullName')
        .exec();
}
exports.list = (req, res) => {
    Data
        .getData()
        .then(data => res.status(200).json(data))
        .catch(err => {
            res.status(400).send({
                message: getErrorMessage(err)
            });
        })
}
然后
list
方法将如下所示:

...
// In your model static methods you can do a method that will return data
// You use arrow function, so ES6 is okay. Then you can use Promises 
// to avoid callbacks. Mongoose supports Promises by default.
// 
getData () {
    return this
        .find()
        .sort('-created')
        .populate('creator', 'firstName lastName fullName')
        .exec();
}
exports.list = (req, res) => {
    Data
        .getData()
        .then(data => res.status(200).json(data))
        .catch(err => {
            res.status(400).send({
                message: getErrorMessage(err)
            });
        })
}
对于WebSocket,您可以从模型中调用方法:

app.ws('/', function (ws, req) {                                                    //webSocket callback function
ws.on('message', function (msg) {
    console.log("Message received from client: %s", msg);
    if (msg == "Update" || msg == "update") {

        Data
           .getData()
           .then(data => {
               console.log(data);
               ws.send("fromJSON " + JSON.stringify(calendar));
           })
           .catch(/*Handle errors here*/);

    }
});
}))


或者您可以直接调用
Data.find().sort('-created')…
,而不将其封装到方法中。

我假设它应该是websocket文件中的Data.list()?感谢这一点,它将我推向了正确的方向,但我得到了“this.find()不存在”数据——这是您的模型。并且
列表
方法应该在控制器中。您应该将
getData
添加到。然后将存在
this.find
。我假设它应该是websocket文件中的Data.list()?感谢这一点,它将我推向了正确的方向,但我得到了“this.find()不存在”数据——这是您的模型。并且
列表
方法应该在控制器中。您应该将
getData
添加到。然后,
this.find
将存在。