Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
通过local node.js服务器连接到mongoDB。API可以';t设置或进入正确配置的路由_Node.js_Mongodb_Mongoose - Fatal编程技术网

通过local node.js服务器连接到mongoDB。API可以';t设置或进入正确配置的路由

通过local node.js服务器连接到mongoDB。API可以';t设置或进入正确配置的路由,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,帮帮我!尽管连接到数据库并且(显然)正确定义了配置的所有部分(它们超时),但我似乎无法使用GET或PUT-in-postman(通过API) 请求(通过邮递员): 事实: 我肯定已经连接到数据库了。控制台在记录API成功消息后记录1 所有版本都兼容 我试过3个不同的在线数据库,都有这个问题,我肯定做错了什么 DA代码: 服务器文件: var express = require('express'), app = express(), port = process.env.PORT ||

帮帮我!尽管连接到数据库并且(显然)正确定义了配置的所有部分(它们超时),但我似乎无法使用GET或PUT-in-postman(通过API)

请求(通过邮递员):

事实:

  • 我肯定已经连接到数据库了。控制台在记录API成功消息后记录1

  • 所有版本都兼容

  • 我试过3个不同的在线数据库,都有这个问题,我肯定做错了什么

  • DA代码:

    服务器文件:

    var express = require('express'),
      app = express(),
      port = process.env.PORT || 3000,
      mongoose = require('mongoose'),
      Task = require('./api/models/model'), //created model loading here
      bodyParser = require('body-parser');
    
    // mongoose instance connection url connection
    mongoose.Promise = global.Promise;
    mongoose.connect('mongodb://<my username>:<mypassword>@groceriescluster-shard-00-00-vaffe.mongodb.net:27017,groceriescluster-shard-00-01-vaffe.mongodb.net:27017,groceriescluster-shard-00-02-vaffe.mongodb.net:27017/test?ssl=true&replicaSet=GroceriesCluster-shard-0&authSource=admin');
    
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    
    var routes = require('./api/routes/routes'); //importing route
    routes(app); //register the route
    
    
    app.listen(port);
    
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'MongoDB connection error:'));
    console.log('todo list RESTful API server started on: ' + port);
    setTimeout(function(){console.log(mongoose.connection.readyState)},
    5000)
    
    型号:

    'use strict';
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    
    
    var TaskSchema = new Schema({
      name: {
        type: String,
        required: 'Kindly enter the name of the task'
      },
      Created_date: {
        type: Date,
        default: Date.now
      },
      status: {
        type: [{
          type: String,
          enum: ['pending', 'ongoing', 'completed']
        }],
        default: ['pending']
      }
    });
    
    module.exports = mongoose.model('Tasks', TaskSchema);
    
    路线:

    'use strict';
    module.exports = function(app) {
      var todoList = require('../controllers/controller');
      // todoList Routes
      app.route('/tasks')
        .get(todoList.list_all_tasks)
        .post(todoList.create_a_task);
    
    
      app.route('/tasks/:taskId')
        .get(todoList.read_a_task)
        .put(todoList.update_a_task)
        .delete(todoList.delete_a_task);
    };
    
    package.json
    
    {
      "name": "api",
      "version": "1.0.0",
      "description": "test env api",
      "main": "index.js",
      "scripts": {
        "test": "echo \\\"No time for tests today\\\" && exit1\""
      },
      "keywords": [
        "Here",
        "it",
        "goes!"
      ],
      "author": "Zack Haigh",
      "license": "ISC",
      "devDependencies": {
        "install": "^0.10.4",
        "nodemon": "^1.14.11",
        "npm": "^5.6.0"
      },
      "dependencies": {
        "@google-cloud/storage": "^1.5.2",
        "body-parser": "^1.18.2",
        "express": "^4.16.2",
        "mongo": "^0.1.0",
        "mongodb": "^2.2.34",
        "mongoose": "^5.0.1"
      }
    }
    

    我看不出您的问题,但我可以向您展示我对
    NodeJS
    -
    mongoose
    express
    的配置

    app.js

    var mongoose = require('mongoose')
    const { db } = require('./config.js')    
    mongoose.Promise = global.Promise    
    var app = express()
    
    mongoose.connect(`mongodb://${db.user}:${db.password}@ds135486.mlab.com:35486/${db.name}`, { useMongoClient: true })
        .then(function (info) {
            console.log("Conexion MongoDB mlab exitosa...")
    
        }).catch(function (error) {
            console.log("Error MongoDB mlab", error)
    
        })
    app.use('/', require('./routes/dbtest'))
    /*...more code...*/
    
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    
    var Corpus = new Schema({
        fecha: Date, //UTC time
        compressed: {
            type: Boolean,
            default: false
        }
    })
    
    module.exports = mongoose.model('Corpus', Corpus);
    
    const router = require('express').Router()
    const mongoose = require("mongoose")
    const Corpus = require('../models/Corpus.js')
    
    router.get("/corpus", async function (req, res, next){
        try {
            var docs = await Corpus.find({}, 'fecha compressed').exec()
            docs = docs.map(d=> d.toObject()).sort((d1, d2)=> d1.fecha - d2.fecha)
            res.json(docs)
    
        } catch (e) { next(e) }
    })
    module.exports = router;
    
    模型/Corpus.js

    var mongoose = require('mongoose')
    const { db } = require('./config.js')    
    mongoose.Promise = global.Promise    
    var app = express()
    
    mongoose.connect(`mongodb://${db.user}:${db.password}@ds135486.mlab.com:35486/${db.name}`, { useMongoClient: true })
        .then(function (info) {
            console.log("Conexion MongoDB mlab exitosa...")
    
        }).catch(function (error) {
            console.log("Error MongoDB mlab", error)
    
        })
    app.use('/', require('./routes/dbtest'))
    /*...more code...*/
    
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    
    var Corpus = new Schema({
        fecha: Date, //UTC time
        compressed: {
            type: Boolean,
            default: false
        }
    })
    
    module.exports = mongoose.model('Corpus', Corpus);
    
    const router = require('express').Router()
    const mongoose = require("mongoose")
    const Corpus = require('../models/Corpus.js')
    
    router.get("/corpus", async function (req, res, next){
        try {
            var docs = await Corpus.find({}, 'fecha compressed').exec()
            docs = docs.map(d=> d.toObject()).sort((d1, d2)=> d1.fecha - d2.fecha)
            res.json(docs)
    
        } catch (e) { next(e) }
    })
    module.exports = router;
    
    路由/dbtest.js

    var mongoose = require('mongoose')
    const { db } = require('./config.js')    
    mongoose.Promise = global.Promise    
    var app = express()
    
    mongoose.connect(`mongodb://${db.user}:${db.password}@ds135486.mlab.com:35486/${db.name}`, { useMongoClient: true })
        .then(function (info) {
            console.log("Conexion MongoDB mlab exitosa...")
    
        }).catch(function (error) {
            console.log("Error MongoDB mlab", error)
    
        })
    app.use('/', require('./routes/dbtest'))
    /*...more code...*/
    
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    
    var Corpus = new Schema({
        fecha: Date, //UTC time
        compressed: {
            type: Boolean,
            default: false
        }
    })
    
    module.exports = mongoose.model('Corpus', Corpus);
    
    const router = require('express').Router()
    const mongoose = require("mongoose")
    const Corpus = require('../models/Corpus.js')
    
    router.get("/corpus", async function (req, res, next){
        try {
            var docs = await Corpus.find({}, 'fecha compressed').exec()
            docs = docs.map(d=> d.toObject()).sort((d1, d2)=> d1.fecha - d2.fecha)
            res.json(docs)
    
        } catch (e) { next(e) }
    })
    module.exports = router;
    

    我看不出您的问题,但我可以向您展示我对
    NodeJS
    -
    mongoose
    express
    的配置

    app.js

    var mongoose = require('mongoose')
    const { db } = require('./config.js')    
    mongoose.Promise = global.Promise    
    var app = express()
    
    mongoose.connect(`mongodb://${db.user}:${db.password}@ds135486.mlab.com:35486/${db.name}`, { useMongoClient: true })
        .then(function (info) {
            console.log("Conexion MongoDB mlab exitosa...")
    
        }).catch(function (error) {
            console.log("Error MongoDB mlab", error)
    
        })
    app.use('/', require('./routes/dbtest'))
    /*...more code...*/
    
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    
    var Corpus = new Schema({
        fecha: Date, //UTC time
        compressed: {
            type: Boolean,
            default: false
        }
    })
    
    module.exports = mongoose.model('Corpus', Corpus);
    
    const router = require('express').Router()
    const mongoose = require("mongoose")
    const Corpus = require('../models/Corpus.js')
    
    router.get("/corpus", async function (req, res, next){
        try {
            var docs = await Corpus.find({}, 'fecha compressed').exec()
            docs = docs.map(d=> d.toObject()).sort((d1, d2)=> d1.fecha - d2.fecha)
            res.json(docs)
    
        } catch (e) { next(e) }
    })
    module.exports = router;
    
    模型/Corpus.js

    var mongoose = require('mongoose')
    const { db } = require('./config.js')    
    mongoose.Promise = global.Promise    
    var app = express()
    
    mongoose.connect(`mongodb://${db.user}:${db.password}@ds135486.mlab.com:35486/${db.name}`, { useMongoClient: true })
        .then(function (info) {
            console.log("Conexion MongoDB mlab exitosa...")
    
        }).catch(function (error) {
            console.log("Error MongoDB mlab", error)
    
        })
    app.use('/', require('./routes/dbtest'))
    /*...more code...*/
    
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    
    var Corpus = new Schema({
        fecha: Date, //UTC time
        compressed: {
            type: Boolean,
            default: false
        }
    })
    
    module.exports = mongoose.model('Corpus', Corpus);
    
    const router = require('express').Router()
    const mongoose = require("mongoose")
    const Corpus = require('../models/Corpus.js')
    
    router.get("/corpus", async function (req, res, next){
        try {
            var docs = await Corpus.find({}, 'fecha compressed').exec()
            docs = docs.map(d=> d.toObject()).sort((d1, d2)=> d1.fecha - d2.fecha)
            res.json(docs)
    
        } catch (e) { next(e) }
    })
    module.exports = router;
    
    路由/dbtest.js

    var mongoose = require('mongoose')
    const { db } = require('./config.js')    
    mongoose.Promise = global.Promise    
    var app = express()
    
    mongoose.connect(`mongodb://${db.user}:${db.password}@ds135486.mlab.com:35486/${db.name}`, { useMongoClient: true })
        .then(function (info) {
            console.log("Conexion MongoDB mlab exitosa...")
    
        }).catch(function (error) {
            console.log("Error MongoDB mlab", error)
    
        })
    app.use('/', require('./routes/dbtest'))
    /*...more code...*/
    
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    
    var Corpus = new Schema({
        fecha: Date, //UTC time
        compressed: {
            type: Boolean,
            default: false
        }
    })
    
    module.exports = mongoose.model('Corpus', Corpus);
    
    const router = require('express').Router()
    const mongoose = require("mongoose")
    const Corpus = require('../models/Corpus.js')
    
    router.get("/corpus", async function (req, res, next){
        try {
            var docs = await Corpus.find({}, 'fecha compressed').exec()
            docs = docs.map(d=> d.toObject()).sort((d1, d2)=> d1.fecha - d2.fecha)
            res.json(docs)
    
        } catch (e) { next(e) }
    })
    module.exports = router;
    
    这让我很困惑:

    var routes = require('./api/routes/routes'); //importing route
    routes(app); //register the route
    
    据我所知,在Express.js v.4中,在服务器中插入路由的方式如下:

    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    
    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    

    我将以这种方式定义路由,这样您就不必使用app as param的函数:

    var express = require('express');
    var todoList = require('../controllers/controller');
    
    var router = express.Router();
    
      // todoList Routes
    router.route('/tasks')
        .get(todoList.list_all_tasks)
        .post(todoList.create_a_task);
    
    router.route('/tasks/:taskId')
        .get(todoList.read_a_task)
        .put(todoList.update_a_task)
        .delete(todoList.delete_a_task);
    
    module.exports = router;
    
    在服务器文件中,请按如下方式使用它们:

    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    
    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    

    另外,如果您试图使用
    app.router
    ,它在Express.js v.3中被留下,并在升级到v.4时被删除。这让我非常困惑:

    var routes = require('./api/routes/routes'); //importing route
    routes(app); //register the route
    
    据我所知,在Express.js v.4中,在服务器中插入路由的方式如下:

    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    
    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    

    我将以这种方式定义路由,这样您就不必使用app as param的函数:

    var express = require('express');
    var todoList = require('../controllers/controller');
    
    var router = express.Router();
    
      // todoList Routes
    router.route('/tasks')
        .get(todoList.list_all_tasks)
        .post(todoList.create_a_task);
    
    router.route('/tasks/:taskId')
        .get(todoList.read_a_task)
        .put(todoList.update_a_task)
        .delete(todoList.delete_a_task);
    
    module.exports = router;
    
    在服务器文件中,请按如下方式使用它们:

    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    
    var routes = require('./api/routes/routes'); //importing route
    app.use(routes); //register the routes
    


    另外,如果您尝试使用
    app.router
    ,它在Express.js v.3中被保留,并在升级到v.4时被删除。您尝试连接时出现了什么错误?你是怎么联系的?我们需要更多的细节。唯一的错误是邮递员的要求。“无法得到任何回应”。这不是一个很有用的方法,但我希望它能有所帮助。当你尝试连接时会出现什么错误?你是怎么联系的?我们需要更多的细节。唯一的错误是邮递员的要求。“无法得到任何回应”。这不是一个非常有用的例子,但我希望它有帮助。谢谢你的例子!这种方法也存在同样的问题。连接到数据库,无法对数据库执行任何操作。感谢提供示例!这种方法也存在同样的问题。连接到数据库,无法对数据库执行任何操作。谢谢兄弟!现在我在节点控制台中得到一个500错误和“TypeError:app.route不是函数”。你已经帮了很多忙,但是你知道为什么会发生这种情况吗?我更新了我的答案。我认为您弄乱了路线定义以及如何在Express应用程序中使用它们。首先,我要感谢您迄今为止提供的所有帮助。我已经更新了我的代码(如果你不相信我要说的话,可以发布)。我又回到原点了!本地API调用仍然有效(例如,
    router.route('/').get(function(req,res){res.json({message:'woot woot!'});
    ,但只要我尝试访问远程mongodb服务器,我就会得到“无法获得任何响应”。我知道我的凭据是正确的,因为我现在已登录mongo shell中的DB。使用正确的字符串格式!使用mlab和atlas进行了尝试。我需要先手动创建集合吗?我读过的每个教程都有您直接从API POST写入DB的内容。如果您没有数据,您将无法检索数据!谢谢老兄!现在我收到一个500错误和“TypeError:app.route不是函数”在节点控制台中。您已经帮了很多忙,但是您知道为什么会发生这种情况吗?我更新了我的答案。我认为您弄乱了路由定义以及如何在Express应用程序中使用它们。首先,我要感谢您迄今为止提供的所有帮助。我已经更新了代码(如果您不相信我将要说的话,可以发布)。我又回到原点了!本地API调用仍然有效(即,
    router.route('/').get(function(req,res){res.json({message:'woot woot!'});
    ,但只要我尝试访问远程mongodb服务器,我就会得到“无法获得任何响应”。我知道我的凭据是正确的,因为我现在已登录mongo shell中的DB。使用正确的字符串格式!使用mlab和atlas进行了尝试。我是否需要先手动创建集合?我读过的每个教程都有您直接从API POST向DB写入的内容。如果您没有数据,则无法检索数据!