Trong xây dựng dự án Node.js với LoopbackJS, tôi cần lưu trữ dữ liệu trong khi yêu cầu.Node.js process.domain đôi khi không được xác định
Vì vậy, tôi sử dụng domain tính năng:
// pre-processing middleware
app.use(function (req, res, next) {
// create per request domain instance
var domain = require('domain').create();
// save request and response to domain, to make it accessible everywhere
domain.req = req;
domain.res = res;
domain.run(next);
});
Sau đó trong mô-đun cần thiết:
Model.beforeRemote('**', function(oContext, oModel, next) {
// Save method name for later use
process.domain.remoteContext = { /* Here is an error thrown */
methodName: oContext.method.name
};
...
process.domain.res.send() // example of usage
})
NHƯNG khi tôi thực hiện theo yêu cầu từ Safari hoặc IE, process.domain là đôi khi không xác định! Yêu cầu từ Chrome hoặc Firefox hoạt động như mong đợi. Bất kỳ đề xuất?
Lỗi phản ứng:
{"error":{"name":"TypeError","status":500,"message":"Cannot set property 'remoteContext' of undefined","stack":"TypeError: Cannot set property 'remoteContext' of undefined\n at module.exports (/Users/igormatyushkin/projects/Yash/server/hooks/admin-remote.js:12:34)\n at Function.Model.setup.ModelCtor.beforeRemote.args (/Users/igormatyushkin/projects/Yash/node_modules/loopback/lib/model.js:184:9)\n at execStack (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/lib/remote-objects.js:363:13)\n at RemoteObjects.execHooks (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/lib/remote-objects.js:372:10)\n at RemoteObjects.invokeMethodInContext (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/lib/remote-objects.js:512:8)\n at async.series.results (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/node_modules/async/lib/async.js:610:21)\n at _asyncMap (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/node_modules/async/lib/async.js:249:17)\n at async.eachSeries.iterate (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/node_modules/async/lib/async.js:149:13)\n at async.eachSeries (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/node_modules/async/lib/async.js:165:9)\n at _asyncMap (/Users/igormatyushkin/projects/Yash/node_modules/loopback/node_modules/strong-remoting/node_modules/async/lib/async.js:248:13)"}}
Bạn có thể hiển thị cho chúng tôi mã nơi miền không xác định không? Bạn có đang truy cập miền từ cùng phạm vi nơi bạn đã xác định không? Trong ví dụ mã của bạn, bạn không thực sự gắn miền vào tiến trình - tôi cho rằng bạn làm điều đó ở một nơi khác trong mã của bạn?Ngoài ra, vui lòng đăng theo dõi ngăn xếp dẫn đến lỗi không xác định, nó có thể chứa một hoặc hai đầu mối. –
@RobertRossmann, tôi đã cập nhật mã và thêm lỗi được thêm vào. 'Process.domain' được khởi tạo bởi nút, khi' domain.run() 'được gọi và tôi truy cập' process.domain.remoteContext 'sau trong các mô-đun cần thiết khác. – IvanZh