是否可以在像express和socket.io这样的端口上运行socket.io和restify?
我这样做但是没有用
# server.coffee
restify = require 'restify'
socket = require 'socket.io'
server = restify.createServer()
io = socket.listen server
server.listen 1337
Run Code Online (Sandbox Code Playgroud)
当我尝试连接到socket.io时:
GET http://localhost:1337/socket.io/socket.io.js 404 (Not Found)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用restify.js构建RESTful api,但我不想向所有人公开api.我将使用基于令牌的身份验证.我心中的过程是这样的,我不确定它是否合理.
用户向api发送用户名/密码以获取令牌.
这个令牌应该包含在每个其他api的调用请求中.
如果这是合理的,我可以使用任何node.js库吗?
另外,我该如何保护令牌?如果有人用令牌拦截了http请求,那么该人将获得api url和令牌.然后他可以按照自己的意愿发送请求.有办法避免这种情况吗?
非常感谢!
我正在使用Restify和Nodejs,我有一个关于将控制权返回到堆栈中下一个中间件的正确方法的问题.当我说"堆栈中的下一个中间件"时,我希望我使用正确的短语.
基本上,我的代码看起来像这样:
//server is the server created using Restify
server.use(function (req, res, next) {
//if some checks are a success
return next();
});
Run Code Online (Sandbox Code Playgroud)
现在,我想知道的是代码应该return next();或者应该只是next();将控制传递给堆栈中的下一个?
我检查了两个工作 - 这两段代码都会成功传递控制并按预期返回数据 - 我想知道的是两者之间是否存在差异,如果我需要使用另一个.
我正在考虑将一些REST服务移动到NodeJS.我唯一担心的是这种解决方案的架构.
它存在某些指导方针吗?当然,我看到一些图书馆喜欢解决问题.这是一个良好的开端,但还不够.
我正在寻找分层,依赖注入,单元测试,csrf等等.
我需要帮助.我正在将json数据发布到我的节点服务器.节点服务器正在使用RESTify作为其API.我无法req.body.name从发布的数据中获取内容.
发布的数据包含一个json正文.在其中我有姓名,日期,地址,电子邮件等密钥.
我想把这个名字从json身上拿出来.我试图这样做,req.body.name但它不起作用.
我也包括在内server.use(restify.bodyParser());,但它不起作用.
我能够req.params.name分配一个值.但是,如果我发布json数据,如:{'food': 'ice cream', 'drink' : 'coke'}我正在未定义.但是,如果我这样做req.body,我会发布完整的json身体.我希望能够专门获得像'drink'这样的项目并在console.log上显示.
var restify = require('restify');
var server = restify.createServer({
name: 'Hello World!',
version: '1.0.0'
});
server.use(restify.acceptParser(server.acceptable));
server.use(restify.jsonp());
server.use(restify.bodyParser({ mapParams: false }));
server.post('/locations/:name', function(req, res, next){
var name_value = req.params.name;
res.contentType = 'json';
console.log(req.params.name_value);
console.log(req.body.test);
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
Run Code Online (Sandbox Code Playgroud) 上下文
我正在尝试使用restify(2.6.2)构建一个动态服务器,其中服务器启动后将安装和卸载服务.我意识到这可以被视为奇怪的东西,但它在DSL面向项目的背景下有意义.为实现这一目标,我实现了以下功能:
var install = function (path, method, handler) {
var id = server[method](path, function (request, response) { // [1]
handler (request, response);
});
return id;
}
var uninstall = function (id) {
delete server.routes[id]; // [2]
}
Run Code Online (Sandbox Code Playgroud)
install函数,在路径和方法名[1]指定的路由中安装处理程序.卸载功能,通过从路由[2]中删除处理程序来卸载处理程序.此功能通过以下代码公开为服务:
var db = ...
var server = restify.createServer ()
.use (restify.bodyParser ({ mapParams: false }))
.use (restify.queryParser ())
.use (restify.fullResponse ());
service.post ('/services', function (request, response) {
var path = request.body.path;
var method = request.body.method;
var handler …Run Code Online (Sandbox Code Playgroud) 我有一个简单的nodejs应用程序正在抛出"Cannot find module './build/Release/DTraceProviderBindings'".我在线查看它看起来很多人在Windows上使用restify时遇到同样的问题(这是我的情况,我在Windows 10上使用restify).显然,dtrace-provider是一个可选模块,用于解析,并且没有适用于Windows的版本.所以,到目前为止我尝试过:
npm install --no-optional;npm install restify --no-optional;dtrace-provider.我在github问题上找到的所有东西,我在OSX用户和其他模块上看到了同样的错误.不知道还有什么可以尝试.
注意:此异常不会停止我的应用程序,甚至不会在控制台上打印错误,我只是注意到这是使用调试器发生的,换句话说,我的应用程序运行正常,但这仍然在后台发生.
我正在使用的其他模块列表:
"dependencies": {
"restify": "latest",
"request": ">=2.11.1",
"cheerio": ">=0.10.0",
"xml2js": ">=0.2.0",
"botbuilder": "^0.11.1",
"applicationinsights": "latest"
}
Run Code Online (Sandbox Code Playgroud) 有什么办法可以更改默认错误输出吗?说我要更改其余的错误输出:
{
"code": "InvalidArgumentError",
"message": "blah blah..."
}
Run Code Online (Sandbox Code Playgroud)
至:
{
"code": 10001,
"message": "blah blah",
"extraMsg": "blah blah"
}
Run Code Online (Sandbox Code Playgroud)
以下是我的一些想法:
听取错误事件.
似乎并非所有RestError都发出了额外的事件(如NotFound,MethodNotAllowed,VersionNotAllowed ...... do).所以我无法捕捉所有错误来重写它们.
在发送响应数据之前收听事件.
我仔细查看了官方文件,没有发现任何亲戚.
修改RestError类的实现.
嗯,这显然不是一个好方法.
还有其他想法吗?
在使用带有承载令牌授权类型的Restify实现REST api时,我遇到了这个问题.
当我向API服务器发送简单的get请求时,它失败并出现CORS问题
405(不允许的方法)angular.js:7962
选项http://api.host.com/tests请求的资源上没有"Access-Control-Allow-Origin"标头.因此,不允许来源" http://local.host.com "访问.
在我的回答中描述了解决方案,所以这对我来说不是真正的问题,因为我在已经知道答案时放置了它,但希望它将来会为其他人节省时间.
我很难找到如何从路由访问REST客户端的IP地址.
server.get('api/foo', function(req, res, next) {
// How can I access the IP address of the requester from here?
}
Run Code Online (Sandbox Code Playgroud) restify ×10
node.js ×9
javascript ×2
rest ×2
api ×1
architecture ×1
cors ×1
json ×1
socket.io ×1
websocket ×1