Tag: restify

restify-oauth2如何使用tokenExpirationTime

我从这里使用restify-oauth2回购: https : //github.com/domenic/restify-oauth2 在自述中提到了tokenExpirationTime但从来没有告诉如何使用它。 这就是它所说的一切: tokenExpirationTime:从标记端点响应的expires_in组件返回的值。 请注意,这只是报告的价值; 您负责自行跟踪令牌过期,并在令牌过期时使用来自authenticateToken的falsecallback。 默认为无穷大。 如果有人能指出我正确的方向或知道如何使用这将是非常感激。 提前致谢!

在Elastic Beanstalk上运行时如何获取服务器URL?

我使用restify来创build部署到Elastic Beanstalk的节点API。 var server = restify.createServer({ name: 'My API' }); server.listen(process.env.PORT || 1704, function() { console.log('%s listening at %s', server.name, server.url); }); 在本地运行时,我看到: 我的API在http://0.0.0.0:1704上监听 但是,在Elastic Beanstalk上运行时,日志显示: 我的API在http://0.0.0.0:8081上监听 这是为什么? 为什么server.url不是http://my-api.elasticbeanstalk.com ? 我怎么能得到真正的url(像http://my-api.elasticbeanstalk.com )?

如何在最后的restify响应处理程序中修改res.body?

我想在发送到客户端之前修改响应主体的链的末尾创build处理程序。 例 restify.get('/api/persons', getAllPersons(), anotherFunction(), modifyBodyFunction()); 问题是链中的一些处理程序(例如anotherFunction()正在调用res.send() ,从而将响应发送回客户端。 有没有什么办法可以在modifyBodyFunction()修改res.body,甚至在处理程序调用res.send()之前?

像指定路由的快速中间件那样定制中间件

我需要像expression中间件一样使用restify中间件系统,但是它似乎不起作用,因为在使用restify时只需要callback server.use(callback) Express允许我们做类似于: server.use(patternConcerned, callback) 所以,当请求将与pattern关联时,服务器将执行中间件调用。 它使用restify存在类似的东西吗?

如何在restify中处理403 HTTP错误?

我一直在restify中处理HTTP错误。 这些是我一直在尝试的代码: function send403(req, res, err, cb) { console.log('Forbidden'); res.end(); } 然后我在ForbiddenError事件中使用该函数: server.on('ForbiddenError', send403); 我期待每一次服务器接收一个请求,而无需authorization头执行该函数 server.get('/resource', function (req, res, next) { if(typeof req.headers['authorization'] === 'undefined') { return next(new restify.ForbiddenError()); } else { // HTTP 200 } }); 每次我尝试访问我不断得到该默认restify JSON消息的url。 仅供参考我已经尝试了404错误的相同的方法,它的工作原理 server.on('NotFound', send404); 每次我尝试发送一个请求到一个不存在的URL, send404函数将被执行。

对Resitify进行集中式error handling

我无法在我的restify应用程序中设置集中的error handling。 我想要捕获某些Mongo错误,如“E11000重复键错误”,然后将其映射到RestiftError。 如果我只是让路由中的Mongo呼叫出现错误,客户端会收到500错误。 我想我应该陷入InternalServerError,但下面的处理程序永远不会被调用: app.on('InternalServerError', function (req, res, err, cb) { console.log('++++++++++++++++', err); return cb(err); }); 我以为我可以使用快速的方法: app.use(function (err, req, res, next){… 但是重新分配处理程序似乎没有错误的参数。 search了所有常见的地方后,我很难过。 看来我的第一个方法应该是刚刚工作。

Node Restify用例获取数据给出一个“ResourceNotFound”

我刚开始使用Nodejs。 我使用Restify从http://api.geonames.org/citiesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo获取数据。 我的代码给了我一个错误:{“code”:“ResourceNotFound”,“消息”:“/不存在”} var restify =require("restify"); var server = restify.createServer(); server.use(restify.acceptParser(server.acceptable)); server.use(restify.queryParser()); server.use(restify.bodyParser()); server.get('http://api.geonames.org/citiesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo', function (req, res) { console.log(req.body); res.send(200,req.body); }); server.listen(7000, function () { console.log('listening at 7000'); });

处理path如/ search /:search(/ filter1 /:filter1)?

我希望能够处理这样的path /search/:search /search/:search/filter1/:filter1 /search/:search/filter2/:filter2 /search/:search/filter1/:filter1/filter2/:filter2 我应该如何使用restify或expressjs(或任何其他REST库)? 我知道我可以创build一个基于正则expression式的处理程序,然后parsing参数,并为每个部分手动调用处理程序,但我直觉应该有一些更简单,更结构化的使用库方法处理程序的方式。 任何意见表示赞赏。 谢谢。 [编辑]我认为的解决scheme的观点是类似于这样的: REST.get('/search/:search(/filter1/:filter1)?(/filter2/:filter2)?',function(req,res,next){ // handler for search where $search is always defined, // but $filter1 and $filter2 are optional }); 现在这样解决,直到find更好的解决scheme 如果没有更好的命题,现在我这样做: var searchHandler = function (req,res,next){}; REST.get('/search/:search', searchHandler); REST.get('/search/:search/filter1/:filter1', searchHandler); REST.get('/search/:search/filter2/:filter2', searchHandler); REST.get('/search/:search/filter1/:filter1/filter2/:filter2', searchHandler);

在路由结束后使用()

我试图使用Restify的“use()”方法来进行通用的error handling,例如, server = restify.createServer({…}); server.use(restify.acceptParser(server.acceptable)); server.use(restify.queryParser()); server.use(restify.bodyParser()); … app.post('/test/:id', function (req, res, next) {…}) server.use(function(err, req, res, next) { logger.error({req: req}, "error processing request"); }); 但最后的.use()处理程序在路由完成处理之后从未被调用过。 它是在航线之后“登记”的。 我可以看到服务器启动时,这个.use()被处理后,我的路线处理。 我是相当新的restify,所以我的问题是,路由结束后,可以使用.user()方法来应用处理程序。 我知道我们可以听到'after'事件来完成路由后的处理,但是想看看我们能否做.use()处理程序。 更新:这是一个简化版本的代码。 在server.post()之前注册的.use()方法被调用,但不是在server.post()之后注册的。 有什么build议么? var restify = require('restify'); var cookieParser = require('restify-cookies'); var helmet = require('helmet'); var util = require('util'); var logger = require('./util/logger'); module.exports […]

将父键添加到此json输出

我正在使用node.js上的restify模块来构build一个REST API服务器。 我有这个简单的API使用restify。 var api_get_sample = function (app, url_name) { function respond(req, res, next) { var door = req.query.door; var connection = custom_mysql.getMySQL_connection(); var query_str = "SELECT XXX, YYY " + "FROM TABLE_X " + "WHERE door = ? " ; var query_var = [door]; var query = connection.query(query_str, query_var, function (err, rows, fields) { […]