javascript - TypeError:无法读取 node.js 和 sqlite 中未定义的属性“名称”
问题描述
我正在尝试将数据插入到我的 sqlite 数据库中。如果我尝试插入它,我会收到一个未定义名称的错误。
我在这里似乎没有看到任何问题。
状态码是:500 Internal Server Error
module.exports = {
setUsers: function(db, name, vorname, geburtsdatum, geschlecht) {
const row = db.run("insert into users (name, vorname, geburtsdatum, geschlecht) values (?,?,?,?)", [name, vorname, geburtsdatum, geschlecht]);
return row['id'];
},
getUser: function(db, newID){
const row = db.prepare("select name, vorname, geburtsdatum, geschlecht from users where id = ?", [newID]);
return row;
}
}
这是我的 SQL 文件。
我的 app.js 看起来像这样
var express = require('express'); // Express web server framework
var request = require('request'); // "Request" library
var cors = require('cors');
var querystring = require('querystring');
var cookieParser = require('cookie-parser');
var client_id = ''; // Your client id
var client_secret = ''; // Your secret
var redirect_uri = 'http://localhost:8888/callback'; // Your redirect uri
//const db = require('better-sqlite3')('data/datifyme.db', {});
const sqlite = require('sqlite3').verbose();
var db = new sqlite.Database('./data/datifyme.db');
const bodyparser = require('body-parser');
var router = express.Router();
var access_token;
var refresh_token;
var newID;
const callbacks = require('./callbacks');
const dbcrud = require('./sql');
/**
* Generates a random string containing numbers and letters
* @param {number} length The length of the string
* @return {string} The generated string
*/
var generateRandomString = function(length) {
var text = '';
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
var stateKey = 'spotify_auth_state';
var app = express();
app.use(express.static('public'))
.use('/css', express.static(__dirname + 'public/css'))
.use('/javascript', express.static(__dirname + 'public/javascript'))
.use('/images', express.static(__dirname + 'public/images'))
.use('/pages', express.static(__dirname + 'public/pages'))
.use(cors())
.use(cookieParser())
console.log('Listening on 8888');
app.listen(8888);
state = generateRandomString(16)
app.get('', (request, response) => {
response.sendFile(__dirname + '/public/views/index.html');
response.cookie(stateKey, state);
});
// https://github.com/thelinmichael/spotify-web-api-node
app.get('/login', function(req, res){
var SpotifyWebApi = require('spotify-web-api-node');
const { Console } = require('console');
// credentials are optional
var spotifyApi = new SpotifyWebApi({
clientId: client_id,
clientSecret: client_secret,
redirectUri: redirect_uri
});
// Get an access token and 'save' it using a setter
spotifyApi.clientCredentialsGrant().then(
function(data) {
access_token = data.body['access_token'];
refresh_token = data.body['refresh_token'];
spotifyApi.setAccessToken(data.body['access_token']);
callbacks.getSpotifyUser(spotifyApi)
let scopes = ['user-read-private', 'user-read-email', 'user-top-read'],
//state = generateRandomString(16),
showDialog = true,
responseType = 'code';
// Create the authorization URL
var authorizeURL = spotifyApi.createAuthorizeURL(
scopes,
state,
showDialog,
responseType
);
res.redirect(authorizeURL);
},
function(err) {
console.log('Something went wrong!', err);
}
);
});
app.get('/callback', function(req, res) {
// your application requests refresh and access tokens
// after checking the state parameter
var code = req.query.code || null;
if (code === null) {
res.redirect('/#' +
querystring.stringify({
error: 'state_mismatch'
}));
} else {
res.clearCookie(stateKey);
var authOptions = {
url: 'https://accounts.spotify.com/api/token',
form: {
code: code,
redirect_uri: redirect_uri,
grant_type: 'authorization_code'
},
headers: {
'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64'))
},
json: true
};
request.post(authOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
access_token = body['access_token'];
refresh_token = body.refresh_token;
var options = {
url: 'https://api.spotify.com/v1/',
headers: { 'Authorization': 'Bearer ' + access_token },
json: true
};
// // use the access token to access the Spotify Web API
// we can also pass the token to the browser to make requests from there
let url = '/#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
})
res.redirect(url);
} else {
res.redirect('/#' +
querystring.stringify({
error: 'invalid_token'
}));
}
});
}
});
app.post('/submit', function(req, res){
var name = req.body.name;
var vorname = req.body.vorname;
var geburtsdatum = req.body.geburtsdatum;
var geschlecht = req.body.geschlecht;
newID = dbcrud.setUsers(db, name, vorname, geburtsdatum, geschlecht);
res.redirect('/pages/konto.html#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
}));
});
app.get('/users', function(req, res){
row = dbcrud.getUser(db, newID);
console.log(row);
res.send(row);
});
这是我的表格
<!DOCTYPE html>
<html lang="de-CH">
<head>
<title>Infos vervollständigen</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="../css/infromationen.css">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@200&family=Noto+Sans+JP:wght@100&family=Roboto:wght@100&display=swap" rel="stylesheet">
</head>
<body>
<div id="container">
<h1>Profil vervollständigen</h1>
<form method="POST" action="/submit">
<label for="name">Name*</label>
<input type="text" id="name" name="name" required><br>
<label for="vorname">Vorname*</label>
<input type="text" id="vorname" name="vorname" required>
<fieldset>
<legend>Geburtsdatum*</legend>
<input type="date" name="geburtsdatum" required>
</fieldset>
<fieldset>
<legend>Geschlecht*</legend>
<input type="radio" id="male" name="geschlecht" value="männlich" required>
<label for="male">Männlich</label>
<input type="radio" id="female" name="geschlecht" value="weiblich">
<label for="female">Weiblich</label>
<input type="radio" id="diverse" name="geschlecht" value="divers">
<label for="diverse">Divers</label>
</fieldset>
<p>* Pflichtfeld</p>
<input type="submit" id="senden" value="Senden">
</form>
</div>
</body>
</html>
一般来说,我对 node.js 和 javascript 相当陌生。
如果有人有想法,我会非常感激。
更新 我没有使用 bodyparser,虽然我需要它。这是丢失的:
.use(bodyparser.json())
.use(bodyparser.urlencoded({extended: true}));
它是这样工作的。
解决方案
推荐阅读
- javascript - PHP错误的数据库编辑
- asp.net - iis 8.0 上的 502 bad gateway 间歇性使用 ARR
- python - 为什么我的图像卷积函数这么慢?
- javascript - 如何用 jest 模拟或测试异步 cb 函数?
- php - Ubuntu 16.04 流浪者盒子。PHP 5.6 快速cgi。我在页面上收到一个通用的 500 错误,但在任何地方都没有日志
- excel - VBA 表格调整大小正在替换下面的内容
- sql - 如何优化数据库连接
- vba - 如何在没有三十部分应用程序的情况下使用 VBA 通过 SSH2 将文件上传到 SFTP
- javascript - Javascript 正则表达式验证完全限定的域名,使得主机名最多 15 个字符
- python - 如何在 Tkinter Canvas 中注册形状?