Node.js+express+MongoDB+Mongooseでユーザ認証の機能を実装しようとしています.
フロントエンドはPOSTリクエストによって認証を要求します.
リクエスト内容はJSON形式で記述されています.
request
1{ 2 "username" : String 3 "password" : String 4}
サーバはusernameでDBのusersコレクションを参照し,
usernameが存在した場合はpasswordと照合してその結果をフロントエンドに返します.
usernameが存在しなかった場合,usernameとpasswordを新規登録します.
userjs
1var mongoose = require('mongoose'); 2var Schema = mongoose.Schema; 3 4var User = new Schema({ 5 username : { type: String, require: true, unique: true }, 6 password : { type: String, require: true } 7}); 8 9module.exports = mongoose.model('user', User);
appjs
1var express = require('express'); 2var path = require('path'); 3//var favicon = require('serve-favicon'); 4var bodyParser = require('body-parser'); 5var logger = require('morgan'); 6var ect = require('ect'); 7var db = require('./models/db'); 8var cookieParser = require('cookie-parser'); 9 10var app = express(); 11 12var routes = require('./routes/index'); 13var api = require('./routes/api'); 14 15 16 17// view engine setup 18/* 19app.set('views', path.join(__dirname, 'views')); 20app.set('view engine', 'jade'); 21*/ 22 23app.engine('ect', ect({ watch: true, root: __dirname + '/views', ext: '.ect' }).render); 24app.set('view engine', 'ect'); 25 26// uncomment after placing your favicon in /public 27//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 28app.use(logger('dev')); 29app.use(bodyParser.json()); 30app.use(bodyParser.urlencoded({ extended: false })); 31app.use(cookieParser()); 32app.use(express.static(path.join(__dirname, 'public'))); 33 34app.use('/', routes); 35app.use('/api', api); 36 37// catch 404 and forward to error handler 38app.use(function(req, res, next) { 39 var err = new Error('Not Found'); 40 err.status = 404; 41 next(err); 42}); 43 44// error handlers 45 46// development error handler 47// will print stacktrace 48if (app.get('env') === 'development') { 49 app.use(function(err, req, res, next) { 50 res.status(err.status || 500); 51 res.render('error', { 52 message: err.message, 53 error: err 54 }); 55 }); 56} 57 58// production error handler 59// no stacktraces leaked to user 60app.use(function(err, req, res, next) { 61 res.status(err.status || 500); 62 res.render('error', { 63 message: err.message, 64 error: {} 65 }); 66}); 67 68 69module.exports = app; 70
apijs
1var express = require('express'); 2var bodyParser = require('body-parser'); 3var router = express.Router(); 4var mongoose = require('mongoose'); 5 6// モデルの宣言 7var User = require('../../models/user'); 8 9// POSTリクエストがきた時の処理 10/* POST内容はJSON形式で飛ばされる 11 * JSON format 12 * { 13 * "username" : String 14 * "password" : String 15 * } 16 */ 17router.post('/grid/test', function(request, response){ 18 console.log("catch the post request"); 19 response.setHeader('Content-Type', 'text/plain'); 20 21 // パラメータ名、usernameとpassを出力 22 console.log(request.body.username); 23 console.log(request.body.password); 24 25 var username = request.body.username; 26 var password = request.body.password; 27 28 User.find({ "username" : username }, function(err, result){ 29 if (err) 30 console.log(err); 31 32 // 新規登録 33 if (result.length == 0){ 34 var user = new User(); 35 36 user.username = username; 37 user.password = password; 38 39 user.save(function(err){ 40 if (err) console.log(err); 41 response.send("new_created"); 42 }); 43 } 44 // usernameがDBに存在した場合 45 else{ 46 if (result[0].password == password) 47 response.send("true"); 48 else 49 response.send("false"); 50 } 51 }); 52}); 53 54module.exports = router;
python
1# -*- coding: utf-8 -*- 2 3import os 4import os.path 5import math 6import requests 7import datetime 8from collections import Counter 9from time import sleep 10import json 11 12 13HOSTNAME = "localhost" 14PORT = "3000" 15URL = "http://" + HOSTNAME + ":" + PORT + "/api/grid/test" 16 17 18def user(): 19 default_params = { 20 21 } 22 23 data = { 24 'username' : String, 25 'password' : String, 26 } 27 28 29 #print(data) 30 31 # データをjsonファイルとしてpost 32 requests.post(URL, json.dumps(data), headers={'Content-Type': 'application/json'}) 33 34if __name__ == "__main__": 35 user() 36
これを実行したら、
error
1NameError: name 'String' is not defined
というエラーが出てしまいます。
何か間違っているところはないか知りたいです。
なお、既存のプログラムに追記をしている為、無駄なコードもあるかと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/11 07:21
2019/12/11 08:03
2019/12/11 08:14
2019/12/11 08:47
2019/12/11 08:50
2019/12/11 09:02
2019/12/11 09:28
2019/12/13 08:10