我正在尝试使用supertest进行一些测试.以下是我要测试的代码段:
it("should create a new org with valid privileges and input with status 201", function(done) {
request(app)
.post("/orgs")
.send({ name: "new_org", owner: "oldschool@aol.com", timezone: "America/New_York", currency: "USD"})
.expect(201)
.end(function(err, res) {
res.body.should.include("new_org");
done();
});
});
Run Code Online (Sandbox Code Playgroud)
我在尝试测试res主体时遇到错误:
TypeError: Object #<Object> has no method 'indexOf'
at Object.Assertion.include (../api/node_modules/should/lib/should.js:508:21)
at request.post.send.name (../api/test/orgs/routes.js:24:27)
at Test.assert (../api/node_modules/supertest/lib/test.js:195:3)
at Test.end (../api/node_modules/supertest/lib/test.js:124:10)
at Test.Request.callback (../api/node_modules/supertest/node_modules/superagent/lib/node/index.js:575:3)
at Test.<anonymous> (../api/node_modules/supertest/node_modules/superagent/lib/node/index.js:133:10)
at Test.EventEmitter.emit (events.js:96:17)
at IncomingMessage.Request.end (../api/node_modules/supertest/node_modules/superagent/lib/node/index.js:703:12)
at IncomingMessage.EventEmitter.emit (events.js:126:20)
at IncomingMessage._emitEnd (http.js:366:10)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23)
at Socket.socketOnData …Run Code Online (Sandbox Code Playgroud) 我有以下代码验证我的"时区"字段:
orgSchema.path('timezone').validate(function(value) {
return Timezone.findOne({_id: value}, "_id", function (err, timezone) { return false; });
}, "Please provide a valid timezone");
Run Code Online (Sandbox Code Playgroud)
即使我在最里面的函数中添加"return false",该字段也总是在传递.我知道我错过了某个地方的回调 - 我会感激一些帮助.
我正在使用带有express和node的mongoose来创建REST API.保存新对象后,我想将对象返回给用户.但是,不想返回一些敏感字段,如密码,信用卡详细信息,权限,帐单历史记录等.
我认为会有相当于.select的地方,你可以只选择一个字段的子集来返回给用户.但是,它似乎不存在,"标准"只是删除您不想传递回用户的字段,如下所示:
org.save(function(err, org) {
if (err) return handleError(err, res);
orgobj = org.toObject();
delete orgobj.__v;
delete orgobj._id;
delete orgobj.billing;
delete orgobj.plans;
delete orgobj.permissions;
return res.send(orgobj);
});
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?我不喜欢这个,因为如果随后添加了一个字段,有人必须记住要专门删除它.此外,出于性能原因,我也不想"重新选择"该字段.
我正在使用node + express创建一个简单的REST API,并试图将路由逻辑从db逻辑中分离出来.我在从路由访问数据库时遇到问题.
这是我的server.js代码:
var express = require('express')
, path = require('path')
, http = require('http')
, mongo = require('mongodb');
// Configure Express app
var app = express();
app.configure(function () {
app.set('port', process.env.PORT || 3000);
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser()),
app.use(express.static(path.join(__dirname, 'public')));
});
// Configure DB
var Server = mongo.Server
, Db = mongo.Db
, BSON = mongo.BSONPure
, server = new Server('localhost', 27017, {auto_reconnect: true})
, db = new Db('mydb', server, {safe: true});
// Open …Run Code Online (Sandbox Code Playgroud) 我有一个如下的架构(简化):
var Permission = new Schema({
_id: String, // email address
role: String // "admin" or "member"
});
var Org = new Schema({
name: {type: String, index: {unique: true, dropDups: true}, trim: true},
permissions: [Permission]
});
Run Code Online (Sandbox Code Playgroud)
示例文档如下所示:
{
"name": "My Org",
"permissions" : [
{"_id" : "joe@gmail.com", "role" : "admin"},
{"_id" : "mary@gmail.com", "role" : "member"}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用该命令删除其中一个权限行org.permissions.remove(req.params.email),如下面的上下文所示:
exports.removePermissions = function(req, res) {
var name = req.params.name;
return Org
.findOne({name: name})
.select()
.exec(function(err, org) {
if (err) …Run Code Online (Sandbox Code Playgroud)