我在 ubuntu 16.04 上使用 nodejs (6.2.1) 和 mongoose(4.4.16) 和 mongodb(2.1.21) 并创建一个注册表单,但是当我提交 mongoose 没有创建文件并请求继续等待。请帮我解决这个问题。下面是文件结构
视图位于 app-server 文件夹上,非常完美,所以我不包括该结构
app-api
??? controllers
? ??? users.js
??? models
? ??? db.js
? ??? users.js
??? routes
??? index.js
Run Code Online (Sandbox Code Playgroud)
var express = require('express');
var router = express.Router();
var ctrlUsers = require('../controllers/users');
router.get('/user', ctrlUsers.userInfo);
router.post('/signup', ctrlUsers.userSignup);
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
var mongoose = require( 'mongoose' );
var mongoURI = 'mongodb://localhost/local';
var mongoDB = mongoose.createConnection(mongoURI);
mongoDB.on('connected', function (){
// console.log("enviorment:" + process.env.NODE_ENV);
// console.log("mongolab:" + process.env.MONGOLAB_URI);
console.log('mongoose connected to ' + mongoURI);
});
mongoDB.on('disconnected', function (){
console.log('mongoose disconnected ');
});
require('./users');
Run Code Online (Sandbox Code Playgroud)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
username: {type: String, required: true, unique: true},
password: {type: String, required: true},
email: {type: String, required: true},
gender: {type: Boolean, "default": "m"},
createdOn: {type: Date, "default": Date.now}
});
module.exports = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)
var mongoose = require( 'mongoose' );
var User = mongoose.model('User');
module.exports.userInfo = function(req,res) {
res.render('signup', {
title: 'User List'
});
};
module.exports.userSignup = function(req,res) {
console.log(req.body);
console.log(User);
if (req.method == 'POST') {
// console.log("[200] " + req.method + " to " + req.url);
User.create({
username: req.body.username,
password: req.body.password,
email: req.body.email
},function (err, user) {
console.log(err);
if(err) handleError(err);
console.log('User saved successfully!');
});
}
};
Run Code Online (Sandbox Code Playgroud)
console.log(req.body);无论我们通过表单发送,这里都会输出
{ username: 'alpha', email: 'beta@gamma.com', password: 'delta' }
和console.log(User)输出
{ [Function: model]
hooks: Kareem { _pres: {}, _posts: {} },
base:
Mongoose {
connections: [ [Object], [Object] ],
plugins: [],
models: { User: [Circular], Location: [Object] },
modelSchemas: { User: [Object], Location: [Object] },
options: { pluralization: true } },
modelName: 'User',
model: [Function: model],
db:
NativeConnection {
base:
Mongoose {
connections: [Object],
plugins: [],
models: [Object],
modelSchemas: [Object],
options: [Object] },
collections: { users: [Object], locations: [Object] },
models: { User: [Circular], Location: [Object] },
config: { autoIndex: true },
replica: false,
hosts: null,
host: null,
port: null,
user: null,
pass: null,
name: null,
options: null,
otherDbs: [],
_readyState: 0,
_closeCalled: false,
_hasOpened: false,
_listening: false },
discriminators: undefined,
schema:
Schema {
paths:
{ username: [Object],
password: [Object],
email: [Object],
gender: [Object],
createdOn: [Object],
_id: [Object],
__v: [Object] },
subpaths: {},
virtuals: { id: [Object] },
singleNestedPaths: {},
nested: {},
inherits: {},
callQueue: [ [Object], [Object] ],
_indexes: [],
methods: {},
statics: {},
tree:
{ username: [Object],
password: [Object],
email: [Object],
gender: [Object],
createdOn: [Object],
_id: [Object],
id: [Object],
__v: [Function: Number] },
_requiredpaths: undefined,
discriminatorMapping: undefined,
_indexedpaths: undefined,
s: { hooks: [Object], queryHooks: [Object] },
options:
{ typeKey: 'type',
id: true,
noVirtualId: false,
_id: true,
noId: false,
validateBeforeSave: true,
read: null,
shardKey: null,
autoIndex: null,
minimize: true,
discriminatorKey: '__t',
versionKey: '__v',
capped: false,
bufferCommands: true,
strict: true,
pluralization: true } },
collection:
NativeCollection {
collection: null,
opts: { bufferCommands: true, capped: false },
name: 'users',
collectionName: 'users',
conn:
NativeConnection {
base: [Object],
collections: [Object],
models: [Object],
config: [Object],
replica: false,
hosts: null,
host: null,
port: null,
user: null,
pass: null,
name: null,
options: null,
otherDbs: [],
_readyState: 0,
_closeCalled: false,
_hasOpened: false,
_listening: false },
queue: [ [Object] ],
buffer: true,
emitter:
EventEmitter {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined } } }
Run Code Online (Sandbox Code Playgroud)
当我mongo在终端上运行并尝试use local show collections不提供任何输出时
终于得到了解决方案 mongoose documentation
重要的!如果您使用 mongoose.createConnection() 打开一个单独的连接,但尝试通过 mongoose.model('ModelName') 访问模型,它将无法按预期工作,因为它没有连接到活动的数据库连接。在这种情况下,通过您创建的连接访问您的模型:
所以现在有两种方法
第一:更改db.js中的连接字符串
从
var mongoDB = mongoose.createConnection(mongoURI);
到
mongoose.connect(mongoURI);
var mongoDB = mongoose.connection;
Run Code Online (Sandbox Code Playgroud)
第二:更改.model()在controllers/users.js中使用的行
var mongoose = require( 'mongoose' );
var conn = mongoose.createConnection('mongodb://localhost/loc8r');
var User = conn.model('User');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2775 次 |
| 最近记录: |