Tag: 表示

在REST API中处理本机对象

我有一个使用expressjs实现的web服务器api,它提供REST api来logging连接到Web服务器机器的networking摄像机。 networking摄像机和编码是使用C ++编写的dll处理的,互操作是使用node-ffi库完成的。 我遇到的问题是我在我的响应中混合使用JSONstring的原生ffi句柄。 例如我有一个Stream类与原型: Stream.prototype.id = ''; Stream.prototype.url = '': Stream.prototype.parent = null; Stream.prototype.filePtr = null; Stream.filePtr将包含一个ffi句柄,例如ref.refType(ref.types.void) 然后在我的expressjs POST start呼叫我做类似的事情: impl.start = function(req, res){ var camera = cameras.find(function(camera) { return camera.id === req.params.camera; }); res.send(camera.startStream()); // startStream returns a new 'Stream' object. }; 正如你所看到的,我只是简单地将Stream对象发送给响应。 我通常如何实现REST API。 问题是,本地filePtr句柄不应该真的被包括在内,我不确定什么是最好的做法,或者如果我做了根本性的错误? 注:我是一个新手,当谈到networking,nodejs,expressjs和一般的JavaScript。 所以如果我正在做的事情没有意义,或者可以做得更好,请指出。 一个更完整的例子: // dll bindings […]

Locomotive.js在调用“locomotive.boot”时抛出错误

我试图在我的locomotive.js应用程序上编写testing,从字面上从互联网上的一些例子复制/粘贴代码。 即使如此,每当我运行我的testing,我得到一个错误说 TypeError: string is not a function 当我检查locomotive.boot(使用locomotive.boot.length)期望的参数的数量,它说2 …但在每一个在线的例子(继续,谷歌它)的文档似乎说3.有谁知道我做错了什么? 这是我的代码: var locomotive = require('locomotive'), should = require('should'), request = require('supertest'); var app, server; describe('Application', function() { before(function(done) { locomotive.boot( __dirname+"/..", "test", function(err, express) { if (err) throw err; app = this; express.listen(4000, '0.0.0.0', function() { var addr = this.address(); console.log('Server started. [Env: '+SOPS.conf.get('app:environment')+'] [Addr: […]

RESTful Express Mongoose&Backbone – Backbone model.remove()不起作用

我正在使用Express,Mongoose和Backbone与Marionette开发Node应用程序。 除了删除路由,所有的路由都运行正常。 如果我调用this.model.destroy,我总是得到这个错误: DELETE http://localhost:3000/api/user 404 (Not Found) 在Express的删除路由中,404被返回,就像Express不支持它一样,但是我已经看到了使用它的大量例子。 这是我的设置: mongoose纲要: var UserSchema = new mongoose.Schema( { name: String, email: String, age: Number }); User = mongoose.model('User', UserSchema); ExpressJS路线:(不工作) app.del('/api/user/:id', user.remove); 要么 app.delete('/api/user/:id', user.remove); 这个路由被骨干model.destroy()调用,但是返回错误404。 ExpressJS的user.js控制器:(工作,但没有达到因为以前的404) exports.remove = function(req, res) { var id = req.params.id; User.findById(req.params.id, function(err, user) { user.remove(function(err) { if(err) res.json(err); res.json('all good'); […]

节点js表示,限制可变范围请求

我有一个简单的快速应用程序接收POST请求,并执行对不同的API的调用。 当一个或多个API请求返回错误时,我想发送一封电子邮件。 我正在做的简化版本如下所示:文件app.js var express = require('express'); var request = require('request'); var email=require('./elasticemail.js'); var numApiRequests=3; var wasError=false; var responseToClient; app.post("/", function(req, res) { responseToClient=res; request({/*first request data*/},function (error, response, body){ if (error) wasError=true; done() } request({/*second request data*/},function (error, response, body){ if (error) wasError=true; done() } request({/*third request data*/},function (error, response, body){ if (error) wasError=true; […]

客户端cookie不能在node.js中使用express存储在redis存储区中

我开发一个应用程序使用Express和Node.js与Redis作为会话存储。 首先我会告诉你我的代码。 var express = require('express'), redis = require('redis'), var app = express(); app.use(express.urlencoded()); app.use(express.json()); app.use(express.cookieParser()); app.use(express.session({ secret: secret, key: 'express.sid', store: new RedisStore({ host: '127.0.0.1', port: 6379 }), cookie: { maxAge: 3600000 } })); app.use(express.methodOverride()); 这对我来说工作正常,但是当我在浏览器中看到我的请求标题时,它显示的cookie值如下。 Cookie:express.sid=s%3AmF_egbthwH9xtg6E3ts9HHLn.l9zuDq1IcApdTUwIP96vpRSTiDLA99iQS2T4HVpV0tE 但是,当我使用redis-cli检查redis时,只是显示了“sess:”键下的一半键,如下所示。 sess:mF_egbthwH9xtg6E3ts9HHLn 我的目的是否有任何问题/错误?

模拟请求对象不能用于node.js中的testing

我有一个模块用于检查会话授权。 这是一个非常简单的脚本,读取会话,如果用户login,则返回true或false。这是我的脚本: module.exports = { check: function(req) { return ( req.session && req.session.swipe && req.session.swipe === true ); } } check()函数将请求对象作为参数,然后读取会话对象。 我想用Jasminetesting它,以确保它返回正确的布尔值。 这是规范: var Auth = require('../controllers/auth'); describe("Authorization", function(){ it("should grant access", function(next) { var request = { session: { swipe: true } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(true); }); it("should deny access", function(next) […]

渲染无视图响应对象的Jade视图

我有一个复杂的asynchronouscallback链,并在链中的任何点,如果有错误,我想呈现一个错误消息的Jade模板。 在下面的函数partnerErr中,是否可以使用没有原始响应对象的模板进行响应? app.post('/dashboard/partners/create', function (req, res) { console.log( req.body ); ParseUtils.doesUserExist( req.body.partnerEmail, function() { ShopifyUtils.doesPartnerExist( req.body.partnerShopSlug, function() { ParseUtils.createUser( req.body, function() { ShopifyUtils.createPartner( req.body, res.send( ' all good. parse and shopify passed. user created. '), partnerErr ); }, partnerErr ); }, partnerErr ); }, partnerErr ); }); function partnerErr(err) { console.log( 'rendering partner error' ); […]

使用Node.js将URLstring发送到其他脚本

我开始学习Node.js,使用Express和Jade和Mongoose作为我的默认工具箱。 我曾经用PHP开发,迁移到Python,并通过Django学习MVC。 有一个大型的客户端JS游戏和Mozilla.org的一些灵感,我愿意做一个多人游戏 – 并认为这是一个非商业机会学习Node:我可以花时间与它。 但是,我遇到了一个问题。 我不是要自己编写一个MVC系统,而是像大多数MVC那样分离我的网站的“应用程序”。 这个问题可能是基本的 – 有这样的代码块: app.get(/^blog/, function(req, res) { require("./blog")(); }); …我了解Node / Express的URL掩码的基本知识,但是我需要将其余的URLstring( mysite.com/blog后的所有内容)传递给另一个URLparsing脚本。 我search了一会儿,找不到一个好的解决scheme。 我甚至发现了一个关于在Node和Express中构build一个MVCscheme的完整教程,这个scheme是针对较早的Express版本编写的,但是现在有点过分了。 你能给我一个简单的解决scheme吗? 我认为blog/index.js应该是这样的: module.exports = function(urlstring) { if(urlstring.indexOf('post') != -1) { // do stuff… } else if(urlstring === '/') { // return home.jade or something } }; 我希望我清楚。 提前致谢!

错误:没有准备好parsing。 缺less内容types?

我正在用curl开发一个node.js / express.js应用程序。 curl命令: curl -X PUT -i -T LICENSE.txt localhost:9981/v1/test/bucket/some-object -s 错误,说内容types应该存在。 “text / plain”的内容types不起作用。 实际上,唯一可行的内容types是: Content-Type: multipart/form-data; boundary=—something Content-Type: multipart/form-data; boundary=—something 然而! 如果我只是放一些文本文件,应该是什么边界? curl命令挂起,因为,我认为,边界不能弥补。 现在,这个curl命令起作用了: curl localhost:9981/v1/test/container/some-object -X PUT -F "file=@/opt/nedge/README.md"但这不是我想要的,因为我不想指定file=@ 最后一个问题是正在运行的node.js代码。 这是一个示例busboy,他们的github的第一个例子: https : //github.com/piousbox/busboy 我的问题是:要么使用curl指定正确的边界,要么使busboy(或node.jsstream)全部接受multipart/form-data以外的内容types。

fs.unlink不会删除文件

在我的Express服务器上,我想把用户上传的文件重命名为符合他们的用户名。 如果用户名上传新文件,则replace前一个文件。 代码如下: var newPath = 'uploads/' + user.username + '.' + (file.extension).toLowerCase(); var basePath = path.resolve(__dirname + '../../../') + '/'; // Copy, rename and delete temp file var is = fs.createReadStream(basePath + file.path); var os = fs.createWriteStream(basePath + newPath); is.pipe(os); is.on('end', function (error) { if (err) return res.send(500); fs.unlink(basePath + file.path); }); 问题是, fs.unlink(basePath […]