我有一个函数,试图从MongoDB中的设置集合中获取特定值.设置集合中包含设置值的设置对象标记为{'settings':'settings'}.架构是:
collection:setting
|--object
|--{'settings':'settings'}
|--{'valueA':'valueA'}
|--...
Run Code Online (Sandbox Code Playgroud)
问题是当我第一次查询设置对象时,集合'settings'根本不存在.所以,
exports.getInstruments = function (callback) {
db.collection("settings", function(error, settings) {
settings.find({ "settings" : "settings" }), (function(err, doc) {
callback(doc.instruments);
});
]);
}
Run Code Online (Sandbox Code Playgroud)
只是挂起并且不调用回调.如果收集不存在,我应该返回""或未定义,否则 - doc.instrumens.
我有一个集合"公司".此集合中的每个对象都有"lastcall"-param.它是一个简单的字符串,包含最后一次调用的UNIX时间.我想找到所有的公司,其中最后呼叫高于一比和较低b.我怎样才能做到这一点?这是我用来访问compnaies的代码:
//query to lastcall
collection.find( {'lastcall': a} , function (err, companies) {
companies.each(function (err, company) {
//do something with every object...
});
});
Run Code Online (Sandbox Code Playgroud)
这段代码将返回'lastcall' = A的所有公司,但我需要所有A <'lastcall'<B的公司.我怎么能这样做?谢谢!
我的代码在生产服务器上有一个相当奇怪的问题.在我的MacOS上它运行得很好,但是当我部署我的应用程序时,我无法登录.调试后,我发现我无法从req-object加载会话.这是所有主要部分的代码(设置,登录页面和登录后的主页)
//SETTINGS
var express = require('express');
var app = express.createServer();
var mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db,
ObjectID = require('mongodb').ObjectID;
var BSON = require('mongodb').BSONPure;
var RedisStore = require('connect-redis')(express);
//connecting to mongo
var server = new Server('localhost', 27017, {
auto_reconnect: true
});
var db = new Db('metadocs-node_db', server);
//setting express app
app.set('view engine', 'ejs');
app.configure(function () {
app.use("/static", express.static(__dirname + '/static'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
secret: "meta-meta",
store: new RedisStore
}));
app.use(express.methodOverride());
});
//login page - POST for /login …Run Code Online (Sandbox Code Playgroud) 最近有一个类似的问题,但仍然无法得到它.我必须在添加新用户之前验证注册页面.
app.post('/signup', function(req, res) {
//checking if first name is filled
if (req.body.first_name = "" || req.body.first_name = null || req.body.first_name = undefined) {
res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : "empty_first_name" });
break;
}
//checking if last name is filled
if (req.body.last_name = "" || req.body.last_name = null || req.body.last_name = undefined) {
res.render('signup', { "title": "Ttitle", "menu": "signup", user: req.user, "error" : "empty_last_name" });
break;
}
//checking if email is filled
if (req.body.email = "" …Run Code Online (Sandbox Code Playgroud) 我试图通过jQuery发布后重定向到指定的页面.这是我的POST代码:
$.post("/addcompany", {
name: $('#company_name').val(),
phone: $('#company_phone').val(),
email: $('#company_email').val(),
suppliers: JSON.stringify(suppliers),
}, function(){
alert('after post');
window.location.href = '/companies';
}
);
Run Code Online (Sandbox Code Playgroud)
这是我在NodeJS上的后端代码:
app.post('/addcompany',function(req,res){
db.collection("companies",function(err,collection){
collection.insert( {
"name":req.body.name,
"email":req.body.email,
"phone":req.body.phone,
"suppliers" : JSON.parse(req.body.suppliers)
});
});
res.redirect('/companies');
});
Run Code Online (Sandbox Code Playgroud)
问题是如果我不是在jQuery脚本和NodeJS后端代码中重定向到'/ companies',我的重定向不起作用.我应该在哪里放置重定向代码?这是正常的,我必须把它放两次 - 无论是在服务器上还是在客户端上?谢谢!
我正在尝试将JSON-object形式的MongoDB发送到带有ejs模板引擎的页面.这是我的DB(一个JSON对象)的响应:
"suppliers": [
{
"lastname": "lastname1",
"firstname": "firstname1",
"middlename": "middlename1",
"mobtel": "mobtel1",
"worktel": "worktel1",
"email": "email1"
},
{
"lastname": "lastname2",
"firstname": "firstname2",
"middlename": "middlename2",
"mobtel": "mobtel2",
"worktel": "worktel2",
"email": "email2"
}
]
Run Code Online (Sandbox Code Playgroud)
当我从数据库中获取对象时,我必须将其字符串化为str以作为EJS模板引擎的var发送:
var myJSONText = JSON.stringify(doc.suppliers);
profile["suppliers"] =myJSONText;
...
res.render('profile.ejs',{profile:profile});
Run Code Online (Sandbox Code Playgroud)
在前端,我得到一个带有json数据的普通字符串.我通过jQuery解析它到一个对象:
var jsonObject = jQuery.parseJSON('<%= profile.suppliers %>');
for (var i=0; i<jsonObject.length; i++){
//trying to show field 'name' for every supplier
alert(jsonObject[i]['lastname']);
}
Run Code Online (Sandbox Code Playgroud)
......它不起作用,但应该提醒我两次.我试图检查一个纯文本的JSON字符串,来到前端,并找到了这样的符号:
[{"lastname": " ...
Run Code Online (Sandbox Code Playgroud)
似乎jQuery.parseJSON无法从此类字符串创建有效对象.我做错了什么?谢谢!
更新:嗯,我已将我的代码转换为:
NodeJS代码:
profile["suppliers"] =doc.suppliers;
res.render('profile.ejs', { profile:profile });
Run Code Online (Sandbox Code Playgroud)
jQuery代码:
for …Run Code Online (Sandbox Code Playgroud) 我有一个名为'userinfo.js'的模块,用于从DB中检索有关用户的信息.这是代码:
exports.getUserInfo = function(id){
db.collection("users", function (err, collection) {
var obj_id = BSON.ObjectID.createFromHexString(String(id));
collection.findOne({ _id: obj_id }, function (err, doc) {
if (doc) {
var profile = new Array();
profile['username']=doc.username;
return profile;
} else {
return false;
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
从index.js(索引页的控制器,我试图访问userinfo)以这种方式:
var userinfo = require('../userinfo.js');
var profile = userinfo.getUserInfo(req.currentUser._id);
console.log(profile['username']);
Run Code Online (Sandbox Code Playgroud)
Node返回我这样的错误:
console.log(profile['username']); --> TypeError: Cannot read property 'username' of undefined
Run Code Online (Sandbox Code Playgroud)
我做错了什么?提前致谢!