Tag: rest

Express 4.0内容协商和应用程序结构

我使用节点Express 4.0为我的Web服务器和restAPI。 我正在使用内容协商来处理多种types的数据,并处理其余API的版本控制。 但是,我的界面开始变得非常混乱。 下面我有一个非常简单的例子来说明我如何使用内容协商(但是我在每个accept头中有更多的代码行。 我的问题是,是否有经验的大型Expressrest应用程序,以及如何构build代码来分离HTTP部分和实际数据处理之间的关注,以避免非常混乱的app.get() , app.post()等function以及如何保持整个应用程序的良好的概述? 'use strict'; var express = require('express'); var bodyParser = require('body-parser'); var app = express(); app.use(bodyParser.json()); var data = [ { id: 0, title: 'This is content 0'}, { id: 1, title: 'This is content 1'}, { id: 2, title: 'This is content 2'}, { id: 3, title: […]

$ http DELETE变成了OPTIONS AngularJS

当我使用put或delete的时候,它变成了OPTIONS。 我正在使用expressjs为我的服务器框架。 客户: $http({ method: 'DELETE', url: HTTP_URL + '/update/account', params: { mail: mail } }); 服务器: app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Credentials", true); res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE'); res.header("Access-Control-Allow-Headers", 'Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept'); next(); });

无法更新的Sequelize列

是否有可能使用Sequelize在MySQL表上创build一个列,可以在创build新行时初始化,但从未更新? 例如,REST服务允许用户更新他的个人资料。 他可以改变任何领域,除了他的id 。 我可以从APIpath上的请求中id ,但这有点多余,因为有许多不同的模型行为相似。 理想情况下,我希望能够在Sequelize中定义一个约束,以防止将id列设置为DEFAULT以外的任何其他值。 目前,我使用id的setterMethod手动抛出一个ValidationError ,但这似乎是hackish,所以我想知道是否有一个更干净的方式做到这一点。 更糟糕的是,这个实现仍然允许在创build新logging时设置id ,但是我不知道解决方法,因为Sequelize生成查询时会调用setterMethods.id将值设置为DEFAULT 。 return sequelize.define('Foo', { title: { type: DataTypes.STRING, allowNull: false, unique: true, validate: { notEmpty: true } } }, { setterMethods: { id: function (value) { if (!this.isNewRecord) { throw new sequelize.ValidationError(null, [ new sequelize.ValidationErrorItem('readonly', 'id may not be set', 'id', value) ]); } […]

通过代码注释生成API文档

我正在使用aglio来生成我的API文档。 我目前正在根据API蓝图规范为此编写原始降价。 我想知道是否有一种方法可以直接在代码中通过注释生成降价。 有谁知道有一种方法来做到这一点?

NPM请求模块(REST客户端)的默认超时是什么?

以下将我的node.js调用来检索一些数据,这需要超过1分钟。 这将在1分钟(60秒)超时。 我把一个控制台日志的延迟也。 不过,我已经configuration超时120秒,但它不反映。 我知道默认级别的nodejs服务器的超时时间是120秒,但我仍然从这个请求模块获取此次调用的超时时间(60秒)。 请提供你的见解。 var options = { method: 'post', url:url, timeout: 120000, json: true, headers: { "Content-Type": "application/json", "X-Authorization": "abc", "Accept-Encoding":"gzip" } } var startTime = new Date(); request(options, function(e, r, body) { var endTime = new Date(); var latencyTime = endTime – startTime; console.log("Ended. latencyTime:"+latencyTime/1000); res.status(200).send(body); });

Expressjs REST API浏览器

我一直在玩loopback,它有非常好的API资源pipe理器(不知何故提醒我Java的JMX),显然它是集成在框架本身。 有没有一个简单的方法来重新创build与任何npm包相同的经验? 如果不是的话,除了谷歌文档外,如何以方便的方式将您的API暴露给客户端的开发人员?

简单的RESTauthentication策略?

我正在devise一个可以由多个客户端,networking,手机,第三方等使用的Web服务。我正在寻找REST作为一种可能的解决scheme,我正在考虑身份validation的情况。 我正在努力保持简单和高性能的事情。 为了logging,我正在使用Node.js. 我知道会议不build议可扩展性的原因。 通过https传递每个请求的用户名和密码有什么意见? 例如: HTTP://为MyService /用户/用户名列表授权=和密码=为mypass 这种方法是否有严重的缺点? 它是否会打开安全漏洞,跨站点脚本? 一般来说,Web服务是否有更好的解决scheme?

Node / Express – bodyParser为PUT请求为空

我得到一个ExpressPer错误与ExpressParter是无法parsing任何PUT请求…我的configuration是这样设置的: app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.query()); app.use(app.router); 然而,每次我向端点发出PUT请求时,req.body都会返回“undefined”。 我已经尝试通过Chromes REST控制台发出请求,并且也通过jQuery ajax请求这样做: $.ajax({ url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1', type: 'PUT', data: {name: "Test name"}, dataType: 'json' }); 有任何想法吗?

AngularJS可以在没有REST API的情况下使用吗?

当我用node.js创build一个简单的网站时,使用视图引擎(例如.jade)和向其提供数据的控制器(例如,简单的待办事项列表)很好。 但是,如果我决定添加AngularJS作为客户端框架,那么似乎我必须在后端实现REST API来从中获取数据。 几乎所有我在AngularJS上看到的例子都有这样的基本架构:客户端(angular)通过REST API与服务器通信。 AngularJS可以使用没有REST API,如果是的话,我应该做还是应该避免它? 在没有REST API后端的情况下是否有使用AngularJS的build议/最佳实践?

使用node-postgres从SELECT返回结果

无法从node-postgres中的SELECT查询中获取结果。 现在,在代码块的末尾,行是空的。 这个select只是从POSTGRESQL的一个序列中返回下一个值。 我知道你不能从callback中获取结果,但是在这里有没有人使用过node-postgres(或者任何其他数据库模块到节点)来解决这个问题? client.connect(); var query = client.query("SELECT nextval(\'idgenerator\');"); var rows = []; query.on('row', function(row, res) { rows.push(row); }); query.on('end', function(result) { console.log(result.rowCount + ' rows were received'); }); //client.end(); console.log(rows);