标签: restify

Nodejs app结构

我想知道我是否正在构建我的nodejs应用程序以考虑最佳性能.我主要关注的是如何通过模块移动我的应用程序参考.

基本上在我的app.js文件中,我正在声明我的所有要求,库等:

var app = {
    config     : require('../../config.json'),
    restify    : require('restify'),
    path       : require('path'),
    mongo      : require('mongodb'),
    model      : require('./models.js'),
    step       : require('step'),
    q          : require('q'),
    api        : require('./api_util.js'),
    underscore : require('underscore')
};
Run Code Online (Sandbox Code Playgroud)

在我的导出中,我传递了整个app对象.现在,鉴于我对JavaScript的了解(如果我错了,你可以纠正我),这不会创建对象的新实例,它只是将对象作为指针传入并在内存中引用相同的对象.

现在我发现自己除此之外(为了方便)在我的restify库中(可以用Express完成),我将app值附加到服务器请求对象,如下所示:

app.server.pre(function (request, response, next) {
    request.app = app;
    return next();
});
Run Code Online (Sandbox Code Playgroud)

因此,对于每一个请求,如果我需要快速访问我的任何库声明,配置等,我可以轻松访问request.app.我也不认为这是一个问题,同样的逻辑,对象作为一个指针返回到相同的内存空间,所以我不会加倍内存使用或任何东西.

是否有更好/更简单的方法来构建它?

javascript node.js express restify

5
推荐指数
1
解决办法
1313
查看次数

如何在侦听时获取Restify服务器的确切IP地址?

请考虑以下用于其余API节点服务器的代码.

var restify = require('restify');

var server = restify.createServer();

server.get('/echo/:name', function (req, res, next) {
  res.send({name: req.params.name});
  next();
});

server.listen(8080, function () {
  console.log('%s listening at %s', server.name, server.url);
});
Run Code Online (Sandbox Code Playgroud)

使用节点运行该服务器:

$ node echo.js
restify listening at http://0.0.0.0:8080
Run Code Online (Sandbox Code Playgroud)

它显示0.0.0.0哪个是错的.

任何人都可以在开启时如何控制台登录服务器的确切IP?

谢谢


更新:在执行下面的代码时,我得到了下面提到的输出,这再次变得困难,选择哪个IP?

    rest_server.listen(config.appPort, function () {
      var adrs = require('os').networkInterfaces();
          console.log(adrs);
          console.log('%s listening at %s', rest_server.name, rest_server.url);
    });
Run Code Online (Sandbox Code Playgroud)

输出:

{ 'Local Area Connection': [ { address: '192.168.3.60', family: 'IPv4', internal
: false } ],
  'Loopback Pseudo-Interface 1': …
Run Code Online (Sandbox Code Playgroud)

node.js restify

5
推荐指数
2
解决办法
6539
查看次数

使用everyauth和restify

我正在尝试使用everyauth来处理用restify创建的rest api的身份验证.但找不到起点.我希望做的事情如下:

var restify = require('restify');  
var everyauth = require('everyauth');
var server = restify.createServer();
server.use(everyauth.middleware());
Run Code Online (Sandbox Code Playgroud)

但是,restify不接受everyauth中间件.

我如何设置解决方案和每个人?

node.js everyauth restify

4
推荐指数
1
解决办法
2522
查看次数

提取猫鼬与忏悔

我很好奇是否有人能够提供一些有关抽象使用Node.js + Restify + Mongoose构建的API的最佳方法的见解.在来自MVC/PHP背景之后,发现Node应用程序没有字符串/定义结构很有意思.

截至目前,我有我的app.js文件,自动加载我的routes.js文件,所有模型js文件等.

困惑主要在于我的路线应该如何与来自Mongo的数据进行交互.这是我的代码如何布局的基本概述.

app.js:

/**
 * Require Dependencies
 */
var restify    = require('restify')
    , mongoose = require('mongoose')
    , config   = require('./config')
    , routes   = require('./routes');

/**
 * Create Server & Define Settings
 */
var server = restify.createServer({
    name: config.name,
    version: config.version
});

/**
 * Common Handlers
 */
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.jsonp());

/**
 * Connect to Mongo Database
 */
 mongoose.connect(config.mongo.uri, function(err) {

    // assign connection to var so we can pass it down the chain
    var …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js restify

4
推荐指数
1
解决办法
3130
查看次数

nodejs/restify - 图像代理服务器

我正在尝试编写一个简单的图像代理服务器(如果这不是正确的措辞,请随时纠正我).

使用案例:

这是我目前的版本.它似乎提供了一个损坏的图像文件(并通过Web浏览器打开时打开下载提示...).

更新:下面的工作版本.

    var restify = require("restify");
    var http = require("http");
    var request = require("request");

    var server = restify.createServer();

    server.listen(1234, function() {
        console.log("%s listening at %s", server.name, server.url);
    });

    server.get("/image",  getImage);

    function getImage(req, res, next) {

       var imageURL = "http://png-5.findicons.com/files/icons/409/witchery/128/cat.png";

       http.get(imageURL, function(response) {

          var imageSize = parseInt(response.header("Content-Length"));
          var imageBuffer = new Buffer(imageSize);
          var bytes = 0;

          response.setEncoding("binary");

          response.on("data", function(chunk) {
            imageBuffer.write(chunk, bytes, "binary");
            bytes += chunk.length;
          });

          response.on("end", function() {
            console.log("Download complete, …
Run Code Online (Sandbox Code Playgroud)

node.js restify

4
推荐指数
1
解决办法
3855
查看次数

如何处理(即记录)纠正错误

在我们的restify应用程序中,当我们传递错误时next,返回一个通用的500错误,这一切都很好.但是,我还需要在某处记录错误的详细信息,以便我知道发生了什么.

以前,我在一个快速应用程序上工作,集中的错误处理中间件使我们能够在接收错误时执行任何代码,例如日志记录.

集中记录错误详细信息的"解决方法"是什么?我不想在整个应用程序中撒上日志记录语句.

node.js restify

4
推荐指数
1
解决办法
1859
查看次数

启用CORS的服务器不拒绝请求

我试图使用快速Cors与我的resitfy服务器,它似乎并没有否认来自其他ips的请求.我在本地工作所以我尝试将原点设置为随机的公共IP,但我的所有请求仍在进行中

这是我的路线:

module.exports = function(app) {
    var user = require('./controllers/userController');
    var cors = require('cors');
    var corsOptions = require('./cors.json');


    app.post('/auth/signup', cors(corsOptions),user.createUser);
    app.post('/auth/login', cors(corsOptions), user.validateUser);
    app.post('/auth/generateKeys', cors(corsOptions), user.generateKeys);
    app.post('/auth/generateToken', user.generateToken);
};
Run Code Online (Sandbox Code Playgroud)

这是我的cors.json文件,我已经设置了一个随机的ip:

{
    "origin": "http://172.16.12.123",
    "optionsSuccessStatus": 200,
}
Run Code Online (Sandbox Code Playgroud)

在路线上设置了cors我可以在邮递员中看到以下内容,但请求仍在进行中?我希望访问被拒绝响应.

Access-Control-Allow-Origin→ http://172.16.12.123

node.js cors express restify

4
推荐指数
1
解决办法
599
查看次数

node-restify:如何缩进JSON输出?

使节点更好地输出JSON的正确方法是什么(即使用换行符和缩进)?

我基本上希望它输出类似的东西JSON.stringify(object, null, 2),但我认为没有办法配置restify来做到这一点.

没有补丁修改的最佳方法是什么?

javascript json node.js restify

3
推荐指数
1
解决办法
2858
查看次数

PassportJS重定向循环

以下是我的代码

restify = require("restify")
passport = require("passport")
GoogleStrategy = require("passport-google").Strategy

jsonContentType = (req, res, next) ->
    res.setHeader("content-type", "application/json")
    next(req, res, next)

server = restify.createServer(
    name: "Sparked API"
)

passport.use(new GoogleStrategy({
    returnURL: "http://localhost:8080/auth/google/return"
    realm: "http://localhost:8080/"
}, (id, profile, done) ->
    done()
))

server.use(jsonContentType)

server.get("/", (req, res, next) -> 
    res.send(
        message: "hello world!"
    )
)

server.get("/auth/google", passport.authenticate("google"))

server.get("/auth/google/return", passport.authenticate("google", {
    successRedirect: "/"
    failureRedirect: "/"
}))

server.listen(8080, -> console.log("restify listening on 8080"))
Run Code Online (Sandbox Code Playgroud)

看来我即使使用非常简化的版本也会获得重定向循环

server.get("/auth/google/return", passport.authenticate("google", {
    successRedirect: "/"
    failureRedirect: "/"
}))
Run Code Online (Sandbox Code Playgroud)

/是未经身份验证的URL,这是如何导致重定向循环的?我也试过加入 …

javascript node.js coffeescript restify passport.js

3
推荐指数
1
解决办法
1256
查看次数

如何使用Node中的Promises一次执行并行异步多个请求

数组和循环,但我希望能够并行运行所有这些,因为我不想一个接一个地运行.

我基本上希望将所有端点调用状态代码,正文和时间存储为数组,并将它们作为结果返回,而不管端点中是否存在错误.

我正在使用Bluebird,我如何使用它的功能来解决这个问题?

javascript node.js promise restify bluebird

3
推荐指数
1
解决办法
8522
查看次数