2017-07-30 144 views
0

我想導出mongoose變量到另一個JS文件,但我無法讓它工作。導出貓鼬模型

我想導出用戶變量這是一個貓鼬模型。如果我直接包含了貓鼬的東西,可以運行results.js。

錯誤: 類型錯誤:app.user是不是在項目\ API \ JS \ results.js構造 :12:23

app.js

var express = require("express"); 
var session = module.exports = require('express-session'); 
var bodyParser = module.exports = require('body-parser'); 

//MongoDB 
var mongoose = require("mongoose"); 
mongoose.connect("mongodb://localhost/time_report"); 

var userSchema = new mongoose.Schema({ 
    name: String, 
    password: String 
}); 

var user = mongoose.model("user", userSchema); 

var app = module.exports = express(); 
exports.user = user; //This variable is not reachable 

結果。 js

var app = require("./app.js"); 

function showDate() { 
    app.get("/results", function(req, res) { 
     //Get login info 
     var uName = req.query.username; 
     var pw = req.query.password; 

     var newUser = app.user({ //Fail here 
      name: uName, 
      password: pw 
     }); 

     console.log(newUser.name); 

     // Check to match with database 
     user.findOne({ name: newUser.name, password: newUser.password }, function(err, user) { 
      if (err) return handleError(err); 

      if (user) { 
       console.log("Logged in"); 
       //console.log('This is great! %s %s', user.name, user.password); 
       res.render("results", { data: newUser }); 
      } else { 
       res.send("Failed to login"); 
      } 

     }); 
    }); 
} 

回答

1

app.js中,更改爲:

//...   
var app = module.exports = express(); 
exports.user = user; //This variable is not reachable 

與此:

//...   
module.exports = { 
    app: express(), 
    user 
} 

然後,在result.js改變這一行:

var app = require("./app.js"); // <----- NO 

與此另一個:

var {app, user} = require("./app.js"); // <----- YES 

當然,在結果.js你想實例化一個新的用戶(所以不要忘記關鍵字):

var newUser = new user ({ //No longer fails here 
    name: uName, 
    password: pw 
}); 
+0

謝謝!這絕對是令人興奮的。有沒有任何JS版本可以使用更合理的JAVA語法? – user2130951

+0

我假設你是JS的新手。在這種情況下,我建議在Javascript中使用一些加速課程(最好是ES6 Javascript)。如果你習慣了JAVA編程,也許你想學習TypeScript(這是一個嚴格的JavaScript語法超集),它可以強制實施最佳實踐,幫助你避免常見的JS錯誤,並使其與其他OOP語法「有點」相似儘管如此)。但是,在直接進入TypeScript之前,我會首先參加JS的基礎/中級課程。這有意義嗎? –

+0

它確實如此。將研究這一點。 – user2130951