我有一个奇怪的问题,它只影响我正在研究的一个本地应用程序 - 使用这种方法的其他应用程序似乎工作正常(Ghost).这是来自我的Nginx服务器配置:
location @node_proxy {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5000;
}
location / {
try_files @node_proxy =404;
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,我有Ghost运行与此相同,它表现良好.但是对于这个配置,它会导致每个请求都是404 - 它似乎永远不会命中代理.我检查了日志,这证实了我的怀疑,访问或错误日志中没有条目.
我在这个实例中代理的应用程序只是一个简单的基于Express的节点应用程序,所以没有什么复杂的.访问http://127.0.0.1:5000我看到了预期的结果.
如果我将配置更改为:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5000;
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但我想使用命名位置,以避免重复代理声明.
我错过了一些明显的事吗?
我试图了解猫鼬如何使用它的连接.目前我有:
// Datastore.js
var mongoose = require('mongoose'),
conn = mongoose.createConnection();
...
conn.open(host, database, port, options, callback); // Opens connection
// Model.js
var mongoose = require('mongoose');
var Schema = new mongoose.Schema({...})
module.exports = exports = mongoose.model('MyModel', Schema);
// Controller.js
var mongoose = require('mongoose');
var MyModel = mongoose.model('MyModel'); // Retrieves the model ok
MyModel.find({}, function(err, docs){
if(err){} //
console.log(docs); // Does not work
});
Run Code Online (Sandbox Code Playgroud)
但是这不起作用......它只有在我以某种方式传递连接时才有效:
// Datastore.js
var mongoose = require('mongoose'),
conn = mongoose.createConnection();
...
conn.open(host, database, port, options, callback); //
mongoose.set('db', …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以通过slug或id进行查询的mongoose查询,但问题在于我不知道我将要处理哪一个,因为我将其作为Express路由:
app.get('/animals/dogs/:id', function (req, res, next) {
Dogs.find({$or: [{slug: id}, {_id: id}]}, function (err, docs) {
if (err) {
return next(err);
}
// ....
});
});
Run Code Online (Sandbox Code Playgroud)
我希望能够通过任何一种搜索,但是上面的方法会引发Invalid ObjectId错误.
另一种方法是嵌套查询,但这感觉有点麻烦:
app.get('/animals/dogs/:id', function (req, res, next) {
Dogs.find({slug: id}, function (err, docs) {
if (err) {
return next(err);
}
if (!docs) {
Dogs.findById(id, function (err, docs) {
// ...
});
}
// ....
});
});
Run Code Online (Sandbox Code Playgroud)
有没有其他方法我没有考虑过?我知道我可以把我的slu into变成ObjectId,但如果可能的话我宁愿避免这个.
我正试图在使用process.nextTick时解决问题.下面我使用异步库来控制我的代码流,并想知道我是否应该在最终回调中调用nextTick.
async.parallel([
function (callback) {
// do something
callback(data);
},
function (callback) {
// do something
callback(data);
}
],
// callback
function (data) {
process.nextTick(function () {
// do something
});
});
Run Code Online (Sandbox Code Playgroud)