Mongodb 运行expres程序时,获取加载错误页面

Mongodb 运行expres程序时,获取加载错误页面,mongodb,express,Mongodb,Express,为什么我们不能将函数(err,books)用作函数(books,error) 我想知道它违反了什么原则。在不知道错误的情况下,我唯一能想到的是,您可能想使用: var express = require('express'); var app = express(); var bodyparser = require('body-parser'); var mongoose = require('mongoose'); books = require('./models/books.js');

为什么我们不能将
函数(err,books)
用作
函数(books,error)


我想知道它违反了什么原则。

在不知道错误的情况下,我唯一能想到的是,您可能想使用:

var express = require('express');
var app = express();
var bodyparser = require('body-parser');
var mongoose = require('mongoose');
books =  require('./models/books.js');

mongoose.connect('mongodb://localhost/books');
var db = mongoose.connection;

app.get('/api/authors', function (req, res) {
    books.getBooks(function (books,err) {
        if(err){
            throw err;
        }
        res.json(books);

    });
});
您的模型应该被称为
书籍


是否可以包含
错误
消息和
模型
,以便我们可以了解有关问题的更多信息?

执行查询时,结果作为参数传递给回调函数。如果在执行查询时出现任何错误,则将错误作为第一个参数传递,并将结果作为第二个参数传递给回调函数。这就是它的工作原理

所以,你不能互换使用它

在您的情况下,
books.getBooks(函数(books,err){..
如果有任何错误,
books
将是其中包含的错误。如果没有,则将在
err
参数中产生结果

我假设您的查询工作正常,并且您正在对
err
值进行错误检查,这就是您看到错误的原因


可能是您对参数的名称感到困惑。请记住,它们只是变量名,结果根据变量在回调中的位置而定。

要回答您的以下问题:

为什么我们不能将
函数(err,books)
用作
函数(books,
错误)

大多数
npm
模块遵循连续传递样式(CPS)设计模式,该模式使用:

  • cb(null,data)
    传递成功的结果
  • cb(err)
    传递错误并退出函数
  • 而且,该功能只有一个结果
  • 例如:

    let books = mongoose.model ('Books');
    
    这不是一个完整的例子,但显示了它的本质


    TL;DR:我的朋友,这是惯例。

    请在你的问题中包括你所犯的错误
    function getBooks(cb) {
        let books, error;
        // .... Perform the operations
        // .... If all goes well store
        // .... the results in books
    
        if (books) {
            cb(null, result);
        } else {
            error = "There was an error loading books"
            cb(error)
        }
    }