仅定义 mongoose 和 Schema 的 [英] Define mongoose and Schema only ones

查看:35
本文介绍了仅定义 mongoose 和 Schema 的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 express 和 mongodb 开发 nodejs 应用程序.所以我必须在我的所有路由 js 中定义 mongoose 和模式才能使用 mongo 和模式.我只想定义它们.我是 node.js 的新手,所以请耐心等待.我的项目结构:

Hi i am developing nodejs application with express and mongodb.So i must define mongoose and schema in my all routing js to use mongo and schema. I want to define them only ones. I am new at node.js so please be patient. My project structure:

我的 route.js 如下所示:

My route.js is shown below:

var routes = function (app) {
app.locals.error=null;
app.get('/login', function (req, res) {
    return res.render(__dirname + "/views/login", {
        title: 'Giriş',
        stylesheet: 'login'
    });
});
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/fuatblog");
var UserSchema = new mongoose.Schema({
    name: String,
    email: String,
    password: String,
    age: Number
}),

Users = mongoose.model('Users', UserSchema);
app.post('/sessions', function (req, res) {
    console.log(req.body.login.email);
    console.log(req.body.login.password);
    console.log(req.body.login.rememberMe);
    Users.find({
        email: req.body.login.email,
        password: req.body.login.password
    }, function (err, docs) {
        if (! docs.length) {
            // no results...

            console.log('User Not Found');
            res.status(400);

             return res.render(__dirname + "/views/login", {
                    title: 'Giriş',
                    stylesheet: 'login',
                    error: 'Kullanıcı adı veya şifre yanlış'
                });
        }

        console.log('User found');
        req.session.email = docs[0].email;
        console.log(req.session.email);
        return res.redirect('/Management'); 
    });
});
};

module.exports = routes;

还有我的 server.js(app.js)

And my server.js(app.js)

/**
* Module dependencies.
*/
////Mongoose eklendi
var express = require('express'),
mongoose= require('mongoose');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
////Cookie için eklendi.
app.use(express.cookieParser());
////Session desteği için eklendi
app.use(express.session({secret: 'asdfsdfsafasdfasdfasdf'}));
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
////Put ve Delete mothodları için
app.use(express.methodOverride());
////Requeestleri ayrıştırmak için kullanılıyor
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));


// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
////Helpers
//require('./apps/helpers')(app);
//Routes

require('./apps/authentication/routes')(app)
require('./apps/blog/routes')(app) 
require('./apps/management/routes')(app)
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

推荐答案

我假设您的意思是您只想定义架构一次.

I'm going to assume that you meant that you want to define the Schema only ONCE.

我喜欢做的是在服务器启动并建立mongodb连接时初始化我将要使用的所有模型.

What I like to do is to initialize all the models that I'm going to use when the server starts and the mongodb connection is established.

理想的目录结构应该是这样的:

An ideal directory structure would be something like this:

mongodb
--schemas
----user.js
--models.js

您可以将架构放在架构文件夹中,例如您的用户模型:

You would put your schemas inside the schema folder, such as your User model:

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

module.exports = function() {
  var UserSchema = new mongoose.Schema({
    name: String,
    email: String,
    password: String,
    age: Number
  });

  mongoose.model("User", UserSchema);
};

在 models.js 中,您将拥有初始化 schemas 目录中每个架构模型的代码.

In models.js, you would have code that initializes each schema model in the schemas directory.

(models.js)    
exports.initialize = function() {
  require("fs").readdirSync(__dirname + "/schemas").forEach(function(file) {
    require('./schemas/' + file)();
  });
};

在您的 app.js 文件中,您将在与 mongoose 建立连接后执行此调用以初始化所有架构:

In your app.js file, you would do this call to initialize all your schemas AFTER you establish your connection to mongoose:

require($pathToYourModelsJsFile).initialize();

在此之后,您就可以使用您的模型了!当您想使用它们时,您所要做的就是:

After this, you are all set to use your models! All you have to do for when you want to use them is:

var mongoose = require('mongoose');
var User = mongoose.model('User');

// Do work
User.find();

这篇关于仅定义 mongoose 和 Schema 的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆