- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 JavaScript 语法的问题。实际上,我在自学 MEAN 堆栈教程时想出了编码(https://thinkster.io/mean-stack-tutorial#adding-authentication-via-passport)。下面有一个非常奇怪的编码。
})(req, res, next);
(req, res, next) 似乎是参数,但没有函数利用该参数。也许我现在还不够聪明,所以我看不到它。有没有人可以帮助我解决这个问题?谢谢。
router.post('/login', function(req, res, next){
if(!req.body.username || !req.body.password){
return res.status(400).json({message: 'Please fill out all fields'});
}
passport.authenticate('local', function(err, user, info){
if(err){ return next(err); }
if(user){
return res.json({token: user.generateJWT()});
} khác {
return res.status(401).json(info);
}
})(req, res, next);
});
1 Câu trả lời
要了解发生了什么,您应该知道 Express 中的“中间件”是什么。这是一个可以传递给 Express 的函数,它会传递一个请求对象、一个响应对象和一个下一个函数:
function middleware(req, res, next) {
...
}
使用中间件,您可以“利用”HTTP 请求通过 Express 应用程序所遵循的路径,并执行某些操作。
您可能已经注意到中间件函数签名看起来很像您的示例代码:
router.post('/login', function(req, res, next) { ... });
这是一个路由处理程序,针对发送到 /login
của BƯU KIỆN
请求而调用。路由处理程序与中间件类似,因为它们使用相同的参数进行调用,并且还执行某些操作(通常,Kế tiếp
不会在路由处理程序中使用,但它仍然会作为参数传递) .
您也可以“堆叠”中间件:
router.post('/login',
function (req, res, next) { ... }, // first middleware
function (req, res, next) { ... }, // second middleware
...
);
Đây là Kế tiếp
发挥作用的地方:如果第一个中间件对请求不感兴趣,它可以调用 Kế tiếp
(这是一个函数)和请求将被传递给第二个中间件(如果该中间件对此不感兴趣,它也可以调用 Kế tiếp
,将请求沿着应用程序中的所有中间件传递,直到中间件处理该请求或它失败,生成 404 错误,因为没有找到可以处理请求的中间件)。
passport.authenticate()
还返回一个中间件函数。通常这样使用:
router.post('/login',
passport.authenticate(...),
function (req, res, next) { ... }
);
这意味着,如果您查看堆栈示例,passport.authenticate()
应该返回一个接受三个参数 req
,res
的函数code> 和 Kế tiếp
(事实上,确实如此)。
这意味着上面的代码可以重写为:
router.post('/login', function(req, res, next) {
passport.authenticate(...)(req, res, next);
});
这与您问题中的代码相匹配。 Tại sao您想要调用passport.authenticate()
,就像这是一个相对高级的 Passport 主题。
biên tập:从广义上讲,这就是passport.authentication
的样子:
// a function that mimics what `passport.authenticate` does:
function myAuthenticate() {
return function (req, res, next) {
...some stuff...
Kế tiếp();
};
}
这是一个返回函数的函数。您可以像这样使用它:
router.post('/login',
myAuthenticate(),
function (req, res, next) {
...
}
);
这(几乎)与此相同:
router.post('/login',
function(req, res, next) { // <-- this is the function that got returned!
...some stuff...
Kế tiếp();
},
function(req, res, next) {
...
}
);
关于做 Passport nodejs时的javascript语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085927/
Dự án React của tôi cần cập nhật nodejs. Vậy làm thế nào tôi có thể cài đặt lại Node js của mình lên phiên bản mới nhất trong Ubuntu 16.04? Phiên bản Node hiện tại của tôi là node -v v6.0.0 Phiên bản hiện tại của tôi
Tôi đang tìm kiếm một cách hiệu quả để thực hiện từng bước và gỡ lỗi mã máy chủ NodeJS của mình. Hiện tại tôi sử dụng hàng chục lệnh console.log() và nó rất khó. Công cụ hoàn hảo sẽ cho phép tôi kiểm tra giá trị của mọi biến trong ngăn xếp và theo dõi chương trình của tôi từng dòng. Hệ điều hành ưa thích = MacOs
Tôi có hai tệp sau trên trang web của mình: firebase.js gridsome-server.js firebase.js là tệp javascript "thông thường" có nội dung sau: import firebase
Tôi có một ứng dụng nodejs được thực thi từ thư mục A và nhị phân X cũng được thực thi trong thư mục A (sử dụng subprocess exec). Binary X tạo ra tệp đầu ra O trong thư mục A, vì vậy nó luôn bắt đầu từ nơi nó được gọi. Tôi cần ứng dụng nodejs để chạy trong trọng tài
Tôi có máy chủ nodeJS sau đây và có vẻ như nó hoạt động tốt. Tôi muốn viết một chương trình khách nhận tin nhắn từ máy chủ và gọi một số JS dựa trên các tin nhắn đó. Các bước liên quan là: Người dùng truy cập URL http://server.xyz.com:8080/pa không
Tôi muốn thực hiện lệnh gọi API nghỉ ngơi từ máy chủ Node. Hiện tại tôi đang nghĩ đến mô-đun yêu cầu. Bạn có gợi ý bất kỳ module nào tốt nhất để thực hiện lệnh gọi REST (get/post) trong thực tế sản xuất ở Nodejs không? Trân trọng, Ram Câu trả lời hay nhất R
Tôi đang cố gắng sử dụng mainModule như thế này: const { mainModule } = require('process'); module.exports = path.dirname(main
Bây giờ tôi thực sự bối rối về những số phiên bản đó. Tôi đang lên kế hoạch cho một dự án mới và tự hỏi sự khác biệt giữa hai phiên bản là gì. Có vẻ như có một sự khác biệt lớn giữa hai phiên bản, nhưng bây giờ tôi không thể tìm ra sự khác biệt. Có an toàn khi sử dụng phiên bản 4.1 không? Cảm ơn sự giúp đỡ của bạn! Câu trả lời hay nhất Nhảy tới v
Tôi đã cố gắng tìm giải pháp cho vấn đề của mình nhưng không được và đang tìm kiếm một số "ví dụ thực hành tốt nhất". Tôi có một ứng dụng nodejs express và các chức năng của tôi được chia thành nhiều tệp. Ví dụ, tôi có Bộ điều khiển này (oktacont
Câu hỏi này có vẻ rất đơn giản, nhưng với tư cách là người mới bắt đầu sử dụng JS, tôi muốn biết liệu có thể sử dụng các mô-đun NodeJS trong tiện ích mở rộng web hay không (ví dụ: tôi muốn sử dụng tiện ích này: https://github.com/yaronn
Tôi có một tập tin. a.js class A{ constructor(name){ this.name = name; } displayName(){ console.log(name);
Những gì tôi muốn làm là thế này: node x.js | node y.js Tệp x.js chỉ in ra một chuỗi: console.log("hi"); Tệp y.js được thiết kế để lấy chuỗi thông qua process.stdin
Đối với cửa sổ nodejs mới mà tôi đang sử dụng, tôi muốn tô màu cho các dòng mã nguồn được hiển thị. Bạn có gợi ý nào về cách sử dụng npm không? Có rất nhiều công cụ tô sáng cú pháp, nhưng điều làm cho công cụ này có một chút khác biệt là đầu ra là thiết bị đầu cuối; nó
Có cách nào để tham chiếu các thư viện Nodejs có trong thư mục node_modules từ ejs View không? Tôi đang sử dụng expressjs và thư viện máy khách của tôi được phục vụ bởi thư mục /public như thế này
Tôi mới làm quen với NodeJS và đang cố gắng tạo một máy chủ trong NodeJS theo hướng dẫn trên trang web NodeJS. Tôi đã cài đặt NodeJS trên máy tính của mình và tạo tệp app.js với đoạn mã sau. hằng số
Tôi có một máy chủ nodejs-express (1) giao tiếp với mongodb và một máy chủ web (2) trong nodejs-express và Angularjs. Tôi đang cố gắng phát hành một pos
Tôi đang khắc phục sự cố (firebase và nodejs) và đây là phần thứ tư của sự cố, làm thế nào tôi có thể truyền dữ liệu sau khi đăng nhập vào server.js? Tôi đã thử cách này nhưng không thể thực hiện được. Về cơ bản, tôi đang cố gắng lấy idTok của người dùng
NodeJS ghi dữ liệu nhiều lần vào socket mỗi khi trang được làm mới. Khi tôi làm mới trang, số lượng máy chủ nodejs ghi vào socket tăng lên và khi làm mới nhiều trang, số lượng ghi được cố định ở mức 3. Vui lòng kiểm tra đầu ra của bảng điều khiển để biết phản hồi lạ này. Xin vui lòng gửi cùng
Tôi đang gặp sự cố khi cố gắng cập nhật thư mục và triển khai lại nội dung của thư mục đó. Tôi phải sử dụng NodeJS và được cấp cổng 8080 để sử dụng. Tôi đã thử tạo một tập lệnh php (update.php): Bây giờ tôi muốn khởi chạy tập lệnh NodeJS để cập nhật,
Tôi không hiểu sự khác biệt giữa hệ thống đa luồng Java và hệ thống đa luồng Nodejs về mặt hiệu suất và chia sẻ tài nguyên. Vì NodeJS sử dụng vòng lặp sự kiện cho một luồng duy nhất cho chương trình của bạn, nhưng đằng sau nó, nó phân bổ các tác vụ như đọc tệp hoặc truy vấn cơ sở dữ liệu cho các luồng khác nhau. Vì vậy, nó sử dụng nhiều hơn
Tôi là một lập trình viên xuất sắc, rất giỏi!