我正在寻找一种方法来自定义StrongLoop LoopBack HTTP响应代码和标头.
我想遵守一些关于REST API的公司业务规则.
对于JSON中描述的模型,典型情况是让HTTP响应POST请求,使用代码201 +标头Content-Location(而不是没有Content-Location标头的loopback的默认响应代码200).
是否可以使用LoopBack来做到这一点?
我正在使用Grunt,PhantomJS和"watch"插件在我开发时运行我的QUnit测试(与CI分开).我希望能够专注于特定的QUnit模块,同时我正在处理该模块测试所关注的代码.在浏览器中运行QUnit时,我可以指定要运行的模块(与所有测试相对).
所以问题是,我可以告诉Grunt qunit任务只运行某个模块吗?我正在考虑命令行参数,以便我不必更改我的Gruntfile,例如:
~$ grunt qunit --module="test this stuff, test that stuff"
Run Code Online (Sandbox Code Playgroud)
UPDATE
要清楚,我想要运行的是使用QUnit module()方法在测试套件中创建的模块:
module( "group a" );
test( "a basic test example", function() {
ok( true, "this test is fine" );
});
test( "a basic test example 2", function() {
ok( true, "this test is fine" );
});
module( "group b" );
test( "a basic test example 3", function() {
ok( true, "this test is fine" );
});
test( "a basic test example 4", function() {
ok( …Run Code Online (Sandbox Code Playgroud) 我想在我的loopback应用程序中实现多租户.现在,我正在尝试使用中间件重新定义我的数据源,以便根据请求的域为每个请求指向我的mongodb服务器上的不同数据库.代码运行,但它似乎并没有实际更改数据源.相反,它总是使用我的datasources.json中定义的那个.
现在,这就是我在做的事情.我的所有模型都引用了"my_db",我希望每个租户在我的mongo服务器上都有一个数据库.
var dataSourceObj = {
my_db:{
url: process.env.MONGOLAB_URI,
connector: "mongodb",
name: "my_db",
database: tenant
}
}
Object.keys(dataSourceObj).forEach(function(dataSource) {
app.dataSources[dataSource].adapter.settings = dataSourceObj[dataSource];
app.dataSources[dataSource].adapter.clientConfig = dataSourceObj[dataSource];
app.dataSources[dataSource].settings = dataSourceObj[dataSource];
app.dataSources[dataSource].connector.settings = dataSourceObj[dataSource];
app.dataSources[dataSource].connector.clientConfig = dataSourceObj[dataSource];
});
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法?这是一种多租户的愚蠢方式吗?
谢谢!
Ember Data的REST适配器以这种格式接受来自服务器的JSON:
摘自文档:http://guides.emberjs.com/v1.10.0/models/the-rest-adapter/
{
"post": {
"id": 1,
"title": "Node is not omakase",
"comments": [1, 2, 3]
},
"comments": [{
"id": 1,
"body": "But is it _lightweight_ omakase?"
},
{
"id": 2,
"body": "I for one welcome our new omakase overlords"
},
{
"id": 3,
"body": "Put me on the fast track to a delicious dinner"
}]
}
Run Code Online (Sandbox Code Playgroud)
是否有可能从strongloop返回这种JSON格式?
我的app.js看起来像这样:
app = express();
setup.configure(app);
//...more stuff (e.g. database setup, middleware definition, etc.)...
var api = require('./routes/api');
app.use('/api', api);
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
在路由/api.js中,然后有了带有中间件的路由,如下所示:
router.get('/myroute',
app.sessionMW,
function (req, res, next) {
//...
});
Run Code Online (Sandbox Code Playgroud)
JSLint标记错误,因为我将app变量声明为全局变量。如果我用声明var,则路由中会出现错误,因为app是undefined。如果我在路由文件中要求使用的应用程序var app = require('../app'),则会出现此错误:
错误:Route.get()需要回调函数,但得到了一个[object Undefined]
我想通过做适当的定义应用程序
var app = express();
Run Code Online (Sandbox Code Playgroud)
但是,如何访问路线文件中的应用程序?
使用 jest 如何测试在我的 jQuery 应用程序中发出 ajax 请求并模拟其响应的函数?我的应用程序不是在 nodejs 中编译的,而是直接在浏览器中运行的。jest 站点https://github.com/facebook/jest/tree/master/examples/jquery上的示例假定 ajax 函数是一个单独的模块,并且整个应用程序都是用 webpack 之类的东西编译的。这是我的应用程序:
(function(root) {
"use strict";
// if environment is node then import jquery.
var $ = (typeof module === "object" && module.exports) ? require('jquery') : jQuery;
function displayUser() {
var fetchCurrentUser = function (url) {
var xhr = $.get(url);
$.when(xhr)
.done(function(data) {
greet(data);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
});
};
var greet = function(data) {
$('#greet').text('Hello ' + data.name);
}
fetchCurrentUser('/my/api');
return {
fetchCurrentUser: …Run Code Online (Sandbox Code Playgroud) 我正在使用loopback 2.0和socket.io 1.0.6.
我想使用loopback身份验证方法来验证socket.io.
我找到了在loopback/lib/middleware/token.js中验证用户身份的方法.https://github.com/strongloop/loopback/blob/master/lib/middleware/token.js
然后我写如下:
var loopback = require('loopback');
var ioapp = module.exports = socketio;
function socketio(server) {
var io = require('socket.io')(server);
// auth
io.use(function(socket, next) {
loopback.token()(socket.request, null, next);
});
// listeners
...
return io;
};
Run Code Online (Sandbox Code Playgroud)
但实际上我不会工作并导致这样的错误.
/Users/.../project_root/node_modules/loopback/lib/models/access-token.js:201
id = req.param(params[i]);
^
TypeError: Object #<IncomingMessage> has no method 'param'
at tokenIdForRequest (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/loopback/lib/models/access-token.js:201:14)
at Function.AccessToken.findForRequest (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/loopback/lib/models/access-token.js:123:12)
at /Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/loopback/lib/middleware/token.js:53:16
at Array.0 (/Users/ksuzuki/Projects/appsocially/repo/chat-center/server/socket.js:15:28)
at run (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/socket.io/lib/namespace.js:114:11)
at Namespace.run (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/socket.io/lib/namespace.js:126:3)
at Namespace.add (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/socket.io/lib/namespace.js:155:8)
at Client.connect (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/socket.io/lib/client.js:67:20)
at Server.onconnection (/Users/ksuzuki/Projects/appsocially/repo/chat-center/node_modules/socket.io/lib/index.js:309:10)
at Server.EventEmitter.emit …Run Code Online (Sandbox Code Playgroud) 我正在尝试修改create的http状态代码.
POST /api/users
{
"lastname": "wqe",
"firstname": "qwe",
}
Run Code Online (Sandbox Code Playgroud)
返回200而不是201
我可以为错误做些类似的事情:
var err = new Error();
err.statusCode = 406;
return callback(err, info);
Run Code Online (Sandbox Code Playgroud)
但是我找不到如何更改create的状态代码.
我找到了创建方法:
MySQL.prototype.create = function (model, data, callback) {
var fields = this.toFields(model, data);
var sql = 'INSERT INTO ' + this.tableEscaped(model);
if (fields) {
sql += ' SET ' + fields;
} else {
sql += ' VALUES ()';
}
this.query(sql, function (err, info) {
callback(err, info && info.insertId);
});
};
Run Code Online (Sandbox Code Playgroud) 我有以下gruntfile.js代码:
less: {
development: {
files: [{
expand: true,
cwd: 'assets/less',
src: ['*.less'],
dest: 'wwwroot/content/css/',
ext: '.css'
}]
}
},
watch: {
less: {
files: ["assets/less/*.less"],
task: ["less:development"]
}
};
grunt.loadNpmTasks("grunt-contrib-less");
grunt.loadNpmTasks("grunt-contrib-watch");
Run Code Online (Sandbox Code Playgroud)
当我运行监视任务并对我的任何较少文件进行更改时,它检测到较少文件中的更改:
文件"assets\less\abc.less"已更改.
但问题是它没有更新我的abc.css文件.有谁知道为什么这个以及如何解决它?谢谢
看起来内置的LoopBack模型是用"创建/修改"日期字段烘焙的.有没有一种简单的方法将其添加到"生成"模型?我一直在查看文档,但在模型文档中找不到任何内容 - http://docs.strongloop.com/display/public/LB/Defining+models
有什么建议?
loopbackjs ×6
strongloop ×4
javascript ×3
gruntjs ×2
node.js ×2
ajax ×1
api ×1
css ×1
ember.js ×1
express ×1
http ×1
http-headers ×1
jestjs ×1
jquery ×1
less ×1
multi-tenant ×1
qunit ×1
rest ×1
socket.io ×1
testing ×1
websocket ×1