書籍「入門Node.jsプログラミング」でnode.jsを勉強中です。
本の半ば辺りでわからない箇所が出てきました。
express-validatorを使うのですが、そこでエラーが出ます。
つまづくまでは他のライブラリ(mongoose等)を使っていて、ちゃんと使えたのですが、express-validatorを使うところでエラーが出ます。
Visual Studio CodeのIntellisenseが効かなかったので嫌な予感がしたのですが、案の定実行するとエラーが出ます。
エラーが発生する最小のコードは以下の通りです。
node.js
1const express = require("express"); 2app = express(); 3const router = express.Router(); 4const expressValidator = require("express-validator"); 5 6router.use(expressValidator);
エラーメッセージは以下の通りです。
bash
1/Users/linming/Documents/nodejs/test/node_modules/express/lib/router/index.js:451 2 throw new TypeError('Router.use() requires a middleware function') 3 ^ 4 5TypeError: Router.use() requires a middleware function 6 at Function.use (/Users/linming/Documents/nodejs/test/node_modules/express/lib/router/index.js:451:11) 7 at Object.<anonymous> (/Users/linming/Documents/nodejs/test/index.js:6:8) 8(後略)
package.jsonは以下の通りです。
json
1{ 2 "name": "test", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "author": "", 10 "license": "ISC", 11 "dependencies": { 12 "express": "^4.17.1", 13 "express-validator": "^6.3.0", 14 "router": "^1.3.3" 15 } 16}
検証環境は、macOS Mojave 10.14.6、node.jsはv12.10.0です。
バージョンの問題でしょうか?
知見のある方、どうぞよろしくお願いします。
追記
以下のコードを試しました。
node.js
1const http = require("http"); 2const express = require("express"); 3app = express(); 4const router = express.Router(); 5const { check, validationResult } = require('express-validator'); 6 7app.use("/", router); 8 9router.get('/', (req, res) => { 10 res.writeHead(200, { 11 "Content-Type": "text/html" 12 }); 13 let web = "<html><head></head>" + 14 '<body><form action = "/path" name ="form" method = "POST" />' + 15 '<input type = "text" name = "email" />' + 16 '<input type = "submit" name = "submit">' + 17 "</body>" + 18 "</html>" 19 res.write(web); 20 res.end(); 21}); 22 23router.post('/path', [check("email").isEmail()], (req, res) => { 24 const errors = validationResult(req); 25 if (!errors.isEmpty()) { 26 res.status(400).end(); 27 return; 28 } 29 res.status(200).end(); 30}); 31 32app.listen(3000);
コンパイルは通るのですが、メールアドレスを入力しても400エラーになります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/01 20:16 編集
2019/12/01 22:10
2019/12/02 00:02
2019/12/02 07:41
2019/12/07 05:48
2019/12/08 00:22
2019/12/08 01:41
2019/12/08 08:32
2019/12/08 08:52
2019/12/08 09:35
2019/12/08 10:14
2019/12/13 21:39
2020/01/05 09:14
2020/01/05 09:26
2020/01/17 23:15
2020/01/18 03:51
2020/01/19 12:01