javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

node.js - passport.js passport.initialize()中间件不在我们这里

我正在使用带有express + mongoose的节点并尝试将passport.js与restful api一起使用。
身份验证成功后我一直收到此异常(我在浏览器上看到了回调网址):

/Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419
        throw err;
              ^
Error: passport.initialize() middleware not in use
    at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30)
    at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13)
    at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25)
    at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18)
    at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24)
    at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
    at Promise.EventEmitter.emit (events.js:96:17)
    at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
    at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)
    at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13

我读过我应该把app.use(passport.initialize());app.use(passport.session());放在app.use(app.router);之前,这就是我所做的。 这是我注册中间件的express.js:

var express = require('express'),
    mongoStore = require('connect-mongo')(express),
    flash = require('connect-flash'),
    helpers = require('view-helpers');

module.exports = function (app, config, passport) {
    app.set('showStackError', true);
    // should be placed before express.static
    app.use(express.compress({
        filter: function (req, res) {
            return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
        },
        level: 9
    }));
    app.use(express.favicon());
    app.use(express.static(config.root + '/public'));

    app.use(express.logger('dev'));

    // set views path, template engine and default layout
    app.set('views', config.root + '/app/views');
    app.set('view engine', 'jade');

    app.configure(function () {
        // use passport session
        app.use(passport.initialize());
        app.use(passport.session());

        // dynamic helpers
        app.use(helpers(config.app.name));

        // cookieParser should be above session
        app.use(express.cookieParser());

        // bodyParser should be above methodOverride
        app.use(express.bodyParser());
        app.use(express.methodOverride());

        // express/mongo session storage
        app.use(express.session({
            secret: 'linkit',
            store: new mongoStore({
                url: config.db,
                collection : 'sessions'
            })
        }));

        // connect flash for flash messages
        app.use(flash());

        // routes should be at the last
        app.use(app.router);

        // assume "not found" in the error msgs
        // is a 404. this is somewhat silly, but
        // valid, you can do whatever you like, set
        // properties, use instanceof etc.
        app.use(function(err, req, res, next){
            // treat as 404
            if (~err.message.indexOf('not found')) {
                return next();
            }

            // log it
            console.error(err.stack);

            // error page
            res.status(500).render('500', { error: err.stack });
        });

        // assume 404 since no middleware responded
        app.use(function(req, res, next){
            res.status(404).render('404', {
                url: req.originalUrl,
                error: 'Not found'
            });
        });
    });
};

怎么了?

UPDATE根据@Peter Lyons,我已将配置顺序更改为以下内容,但我仍然遇到同样的错误:

var express = require('express'),
    mongoStore = require('connect-mongo')(express),
    flash = require('connect-flash'),
    helpers = require('view-helpers');

module.exports = function (app, config, passport) {
    app.set('showStackError', true);
    // should be placed before express.static
    app.use(express.compress({
        filter: function (req, res) {
            return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
        },
        level: 9
    }));
    app.use(express.favicon());
    app.use(express.static(config.root + '/public'));

    app.use(express.logger('dev'));

    // set views path, template engine and default layout
    app.set('views', config.root + '/app/views');
    app.set('view engine', 'jade');

    app.configure(function () {

        // dynamic helpers
        app.use(helpers(config.app.name));

        // cookieParser should be above session
        app.use(express.cookieParser());

        // bodyParser should be above methodOverride
        app.use(express.bodyParser());
        app.use(express.methodOverride());

        // express/mongo session storage
        app.use(express.session({
            secret: 'linkit',
            store: new mongoStore({
                url: config.db,
                collection : 'sessions'
            })
        }));

        // connect flash for flash messages
        app.use(flash());

        // use passport session
        app.use(passport.initialize());
        app.use(passport.session());

        // routes should be at the last
        app.use(app.router);

        // assume "not found" in the error msgs
        // is a 404. this is somewhat silly, but
        // valid, you can do whatever you like, set
        // properties, use instanceof etc.
        app.use(function(err, req, res, next){
            // treat as 404
            if (~err.message.indexOf('not found')) {
                return next();
            }

            // log it
            console.error(err.stack);

            // error page
            res.status(500).render('500', { error: err.stack });
        });

        // assume 404 since no middleware responded
        app.use(function(req, res, next){
            res.status(404).render('404', {
                url: req.originalUrl,
                error: 'Not found'
            });
        });
    });
};
trans by 2019-09-09T23:23:42Z

javascript - 在Mongoose中引用另一个模式

如果我有两个模式,如:

var userSchema = new Schema({
    twittername: String,
    twitterID: Number,
    displayName: String,
    profilePic: String,
});

var  User = mongoose.model('User') 

var postSchema = new Schema({
    name: String,
    postedBy: User,  //User Model Type
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

我尝试将它们连接在一起,就像上面的例子一样,但我无法弄清楚如何做到这一点。 最终,如果我可以做这样的事情,那将使我的生活变得非常轻松

var profilePic = Post.postedBy.profilePic
trans by 2019-08-24T13:16:29Z

node.js - 如何使用Mongoose删除数据库?

我正在Node.js和Mongoose中准备数据库创建脚本。如何检查数据库是否已存在,如果是,请使用Mongoose删除(删除)它?

我找不到用Mongoose放弃它的方法。

trans by 2019-08-13T20:23:52Z

mongoose - 如何限制退回的物品数量?

myModel.find({}, function(err, items){
console.log(items.length);    // big number
});

如何将返回的项目限制为仅插入的最新10项?

trans by 2019-08-10T13:36:25Z

node.js - MongoDB和Mongoose之间的区别

我想使用mongodb数据库,但我注意到有两个不同的数据库,有自己的网站和安装方法:mongodb和mongoose。 所以我想问自己这个问题:"我使用哪一个?"。

所以为了回答这个问题,我问社区你是否可以解释这两者之间有什么区别? 如果可能的利弊? 因为他们看起来和我很相似。

trans by 2019-08-09T22:10:18Z

mongodb - 如何在不定义模式的情况下使用Mongoose?

在早期版本的Mongoose(对于node.js)中,有一个选项可以在不定义模式的情况下使用它

var collection = mongoose.noSchema(db, "User");

但在当前版本中,“noSchema”功能已被删除。 我的模式可能经常更改,并且实际上不适合定义的模式,所以有没有一种在mongoose中使用无模式模型的新方法?

trans by 2019-08-08T07:37:38Z

node.js - 如何使用mongoose生成ObjectId?

我想用Mongoose生成一个MongoDB ObjectId。 有没有办法从Mongoose访问ObjectId构造函数?

  • 这个问题是关于从头开始生成新的ObjectId。 生成的ID是全新的通用唯一ID。

  • 另一个问题是询问从现有字符串表示创建ObjectId。 在这种情况下,您已经有一个ID的字符串表示 - 它可能是也可能不是普遍唯一的 - 您正在将其解析为ObjectId

trans by 2019-08-05T05:44:49Z

javascript - 单个node.js项目中的Mongoose和多个数据库

我正在做一个包含子项目的Node.js项目。 一个子项目将有一个Mongodb数据库,Mongoose将用于包装和查询db。 但问题是

  • Mongoose不允许在单个mongoose实例中使用多个数据库,因为模型是在一个连接上构建的。
  • 要使用多个mongoose实例,Node.js不允许多个模块实例,因为它在RangeError: Maximum call stack size exceeded中有缓存系统。我知道在Node.js中禁用模块缓存,但我认为这不是一个好的解决方案,因为它只需要mongoose。

    我试过在mongoose中使用RangeError: Maximum call stack size exceededopenSet(),但它不是解决方案。

    我试图深度复制mongoose实例([http://blog.imaginea.com/deep-copy-in-javascript/)]以将新的mongoose实例传递给子项目,但它抛出了RangeError: Maximum call stack size exceeded

我想知道是否有任何使用mongoose的多个数据库或任何解决方法来解决这个问题? 因为我认为猫鼬非常容易和快速。 或任何其他模块作为建议?

trans by 2019-08-04T19:57:10Z

node.js - 为什么mongoose总是在我的集合nam的末尾添加一个s

例如,此代码会生成一个名为“datas”的集合

var Dataset = mongoose.model('data', dataSchema);

此代码导致创建一个名为“users”的集合

var User = mongoose.model('user', dataSchema);

谢谢

trans by 2019-08-04T01:33:02Z

node.js - NodeJS中的JavaScript OOP:怎么样?

我习惯于Java中的经典OOP。

使用NodeJS在JavaScript中进行OOP的最佳实践是什么?

每个类都是一个module.export的文件?

如何创建类?

this.Class = function() {
    //constructor?
    var privateField = ""
    this.publicField = ""
    var privateMethod = function() {}
    this.publicMethod = function() {} 
}

vs.(我甚至不确定它是否正确)

this.Class = {
    privateField: ""
    , privateMethod: function() {}

    , return {
        publicField: ""
        publicMethod: function() {}
    }
}

this.Class = function() {}

this.Class.prototype.method = function(){}

...

继承如何工作?

是否有在NodeJS中实现OOP的特定模块?

我发现了一千种不同的方法来创造类似于OOP的东西..但我不知道最常用/实用/干净的方式是什么。

奖金问题:与MongooseJS一起使用的建议“OOP风格”是什么? (Mongoose JS文档可以被视为一个类和一个用作实例的模型吗?)

编辑

这里是JsFiddle中的一个例子,请提供反馈。

//http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/
function inheritPrototype(childObject, parentObject) {
    var copyOfParent = Object.create(parentObject.prototype)
    copyOfParent.constructor = childObject
    childObject.prototype = copyOfParent
}

//example
function Canvas (id) {
    this.id = id
    this.shapes = {} //instead of array?
    console.log("Canvas constructor called "+id)
}
Canvas.prototype = {
    constructor: Canvas
    , getId: function() {
        return this.id
    }
    , getShape: function(shapeId) {
        return this.shapes[shapeId]
    }
    , getShapes: function() {
        return this.shapes
    }
    , addShape: function (shape)  {
        this.shapes[shape.getId()] = shape
    }
    , removeShape: function (shapeId)  {
        var shape = this.shapes[shapeId]
        if (shape)
            delete this.shapes[shapeId]
        return shape
    }
}

function Shape(id) {
    this.id = id
    this.size = { width: 0, height: 0 }
    console.log("Shape constructor called "+id)
}
Shape.prototype = {
    constructor: Shape
    , getId: function() {
        return this.id
    }
    , getSize: function() {
        return this.size
    }
    , setSize: function (size)  {
        this.size = size
    }
}

//inheritance
function Square(id, otherSuff) {
    Shape.call(this, id) //same as Shape.prototype.constructor.apply( this, arguments ); ?
    this.stuff = otherSuff
    console.log("Square constructor called "+id)
}
inheritPrototype(Square, Shape)
Square.prototype.getSize = function() { //override
    return this.size.width
}

function ComplexShape(id) {
    Shape.call(this, id)
    this.frame = null
    console.log("ComplexShape constructor called "+id)
}
inheritPrototype(ComplexShape, Shape)
ComplexShape.prototype.getFrame = function() {
    return this.frame
}
ComplexShape.prototype.setFrame = function(frame) {
    this.frame = frame
}

function Frame(id) {
    this.id = id
    this.length = 0
}
Frame.prototype = {
    constructor: Frame
    , getId: function() {
        return this.id
    }
    , getLength: function() {
        return this.length
    }
    , setLength: function (length)  {
        this.length = length
    }
}

/////run
var aCanvas = new Canvas("c1")
var anotherCanvas = new Canvas("c2")
console.log("aCanvas: "+ aCanvas.getId())

var aSquare = new Square("s1", {})
aSquare.setSize({ width: 100, height: 100})
console.log("square overridden size: "+aSquare.getSize())

var aComplexShape = new ComplexShape("supercomplex")
var aFrame = new Frame("f1")
aComplexShape.setFrame(aFrame)
console.log(aComplexShape.getFrame())

aCanvas.addShape(aSquare)
aCanvas.addShape(aComplexShape)
console.log("Shapes in aCanvas: "+Object.keys(aCanvas.getShapes()).length)

anotherCanvas.addShape(aCanvas.removeShape("supercomplex"))
console.log("Shapes in aCanvas: "+Object.keys(aCanvas.getShapes()).length)
console.log("Shapes in anotherCanvas: "+Object.keys(anotherCanvas.getShapes()).length)

console.log(aSquare instanceof Shape)
console.log(aComplexShape instanceof Shape)
trans by 2019-07-31T05:07:04Z

node.js - Mongoose(mongodb)批量插入?

Mongoose v3.6 +现在支持批量插入吗? 我已经搜索了几分钟,但是这个查询的任何内容都是几年前的答案,答案是明确的。

编辑:

为了将来参考,答案是使用Model.create(). create()接受数组作为其第一个参数,因此您可以将文档作为数组插入。

请参见Model.create()文档

trans by 2019-07-29T07:37:41Z

node.js - 如何使用2d地理索引正确地在Mongoose模式中定义数组中的对象

我目前在为下面的文档创建架构时遇到问题。 来自服务器的响应始终将“trk”字段值作为[Object]返回。 不知怎的,我不知道这应该如何运作,因为我至少尝试过对我有意义的所有方法;-)

如果这有帮助,我的Mongoose版本是3.6.20和MongoDB 2.4.7在我忘记之前,将它设置为Index(2d)会很高兴

原始数据:

{
    "_id": ObjectId("51ec4ac3eb7f7c701b000000"),
    "gpx": {
        "metadata": {
            "desc": "Nürburgring VLN-Variante",
            "country": "de",
            "isActive": true
        },
    "trk": [
    {
        "lat": 50.3299594,
        "lng": 6.9393006
    },
    {
        "lat": 50.3295046,
        "lng": 6.9390688
    },
    {
        "lat": 50.3293714,
        "lng": 6.9389939
    },
    {
        "lat": 50.3293284,
        "lng": 6.9389634
    }]
    }
}

猫鼬模式:

var TrackSchema = Schema({
            _id: Schema.ObjectId,
            gpx: {
                metadata: {
                    desc: String,
                    country: String,
                    isActive: Boolean
                },
                trk: [{lat:Number, lng:Number}]
            }
        }, { collection: "tracks" });

Chrome中“网络”标签的响应总是如此(这只是错误的trk部分):

{ trk: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],

我已经为“trk”尝试了不同的Schema定义:

  1. trk:Schema.Types.Mixed
  2. trk:[Schema.Types.Mixed]
  3. trk:[{type:[Number],index:“2d”}]

希望你能帮我 ;-)

trans by 2019-07-29T01:44:16Z

使用Node.js,Express和Mongoose上传图像

随着事情多年来的变化,请考虑更新的答案,这些答案包含更多最新信息!

由于许多新的Node.js库很快就被淘汰了,而且我想要询问有关上传图像的例子相对较少:

  • Node.js(v0.4.1)
  • 快递(1.0.7)
  • 猫鼬(1.1.0)。

别人怎么做的?

我发现:node-formidable,但我不熟悉上传图片,所以我想学习一般的东西以及使用Node.js和Express这样做的方法。

trans by 2019-07-27T13:35:14Z

node.js - 生产密码中的Mongoose索引

根据ensureIndexautoIndex/Node.js的Mongoose文档:

当您的应用程序启动时,Mongoose会自动为您架构中的每个已定义索引调用ensureIndex。 虽然很适合开发,但建议在生产中禁用此行为,因为创建索引会对性能产生重大影响。 通过将架构的autoIndex选项设置为false来禁用该行为。

这似乎指示在部署之前从mongoose中删除自动索引以优化Mongoose,指示Mongo在应用程序启动时转到所有索引,这似乎是有道理的。

在生产代码中处理索引的正确方法是什么? 也许外部脚本应该生成索引? 或者,如果单个应用程序是集合的唯一读取器/写入器,则可能不需要ensureIndex,因为每次发生DB写入时它都会继续索引?

编辑:为了补充,MongoDB提供了有关如何进行索引的良好文档,但没有为什么或何时应该执行显式索引指令。 在我看来,索引应该由编写器应用程序自动更新到具有现有索引的集合上,并且ensureIndex实际上更像是一次性的事情(在应用新索引时完成),在这种情况下,Mongoose的autoIndex应该 在正常的服务器重启下是一个无操作。

trans by 2019-07-24T20:08:48Z

mongodb - Mongoose - 强制收集nam

我正在尝试使用mongoose来创建数据库和集合。 我的代码是:

var mongoose = require('mongoose');
    var db = mongoose.connect('mongodb://localhost/testdb');
    var Schema = mongoose.Schema;

    var UserInfo = new Schema({
    username : String,
    password : String 
    });

    mongoose.model('UserInfo', UserInfo);

    var user = db.model('UserInfo');


    var admin = new user();
    admin.username = "sss";
    admin.password = "ee";
    admin.save();

当我运行此代码时,mongoose创建了名为UserInfo而不是userinfo的集合。如何在mongoose中强制收集名称?

trans by 2019-07-22T18:37:47Z

javascript - Mongoose子文档与嵌套模式

我很好奇在我的主模式中使用子文档与更深层的优缺点:

var subDoc = new Schema({
  name: String
});

var mainDoc = new Schema({
  names: [subDoc]
});

要么

var mainDoc = new Schema({
  names: [{
    name: String
 }]
});

我现在到处都在使用subdocs,但我主要想知道性能或查询我可能会遇到的问题。

trans by 2019-07-15T23:46:42Z

javascript - mongoose vs mongodb(nodejs modules / extensions),哪个更好? 为什么?

我刚刚到达Node.js,看到有很多用于MongoDB的库,最受欢迎的似乎是这两个:( mongoose和mongodb)。 我可以获得这些扩展的优缺点吗? 这两个有更好的替代品吗?

编辑:找到一个看起来也很有趣的节点-mongolian的新库,并且是#34; Mongolian DeadBeef是一个非常棒的Mongo DB node.js驱动程序,试图接近mongodb shell。"(readme.md)

[https://github.com/marcello3d/node-mongolian]

这只是为了查看这个的新人增加了更多的资源,所以基本上蒙古语就像ODM一样......

trans by 2019-07-11T06:19:16Z

node.js - 在Javascript中等待一些异步任务完成的最简单方法?

我想删除一些mongodb集合,但这是一个异步任务。 代码将是:

var mongoose = require('mongoose');

mongoose.connect('mongo://localhost/xxx');

var conn = mongoose.connection;

['aaa','bbb','ccc'].forEach(function(name){
    conn.collection(name).drop(function(err) {
        console.log('dropped');
    });
});
console.log('all dropped');

控制台显示:

all dropped
dropped
dropped
dropped

在删除所有集合后,确保all dropped打印的最简单方法是什么? 任何第三方都可用于简化代码。

trans by 2019-07-09T16:57:34Z

node.js - 一旦你做了,就正确地关闭mongoose的连接

我在一个不打算连续运行的脚本中使用mongoose,我面对的是一个看似非常简单的问题但我无法找到答案; 简单地说,一旦我调用任何mongoose函数发送请求到mongodb我的nodejs实例永远不会停止,我必须手动杀死它,比如Ctrl + c或Program.exit()。

代码看起来大致如下:

var mongoose = require('mongoose');

// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb'); 

// define some models

// if I include this line for example, node never stop afterwards
var MyModel =  mongoose.model('MyModel', MySchema);

我尝试添加对mongoose.disconnect()的调用,但没有结果。 除此之外,一切正常(找到,保存,......)。

这个问题与此人完全相同,遗憾的是他没有收到任何答复:[https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661]

谢谢

编辑:接受下面的答案,因为它在技术上是正确的,但如果有人再次遇到这个问题,似乎mongoose和/或mongodb驱动程序实际上没有关闭连接时,如果仍然有查询运行。

它根本不记得断开连接调用,一旦查询完成运行它就不会这样做; 它只是丢弃你的调用,没有抛出异常或任何类型的东西,从来没有真正关闭连接。

所以你有它:确保在调用disconnect()之前已经处理了每个查询,如果你想让它真正起作用的话。

trans by 2019-06-30T23:26:04Z

mongodb - 如何使用Mongoose访问预先存在的集合?

我在数据库test中有300个question对象的大量集合。我可以通过MongoDB的交互式shell轻松地与此集合进行交互; 但是,当我尝试通过Mongoose在express.js应用程序中获取集合时,我得到一个空数组。

我的问题是,如何访问这个已经存在的数据集而不是在Express中重新创建它? 这里有一些代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));

var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });

这输出:

null [] 0
trans by 2019-06-28T07:56:53Z

上一页 1 2 3 4 5 6 下一页 共6页