使用 Passport LocalStrategy、knex 和 postgres 时出现意外令牌错误

Unexpected token error using Passport LocalStrategy, knex, and postgres

我正在尝试使用本地护照策略和到 postgresql 的 knex 连接在 nodejs 应用程序上进行用户身份验证。以下是对应用程序文件以及 LocalStrategy 实例的依赖项:

index.js

var express = require('express'), 
    app = express(),
    server = require('http').createServer(app),
    session = require('express-session'),
    passport = require('passport')
    bcrypt = require('bcryptjs')
    LocalStrategy = require('passport-local').Strategy;
    db = require('./db');
    queries = require('./queries');

app.use(passport.initialize());
app.use(passport.session());
options = {};

passport.use(new LocalStrategy(options, (username, password, done) =>{ 
    queries.findOne().then((user)) => {
            console.log(user)
            if (!user) return done(null, false);
            if (!autHelpers.comparePass(password, user.password)) {
                return done(null, false);
            } else {
                return done(null, user);
            }
        }
}

));

在查询文件中,我放置了 findOne() 函数来查找用户

queries.js

const knex = require ('./db');

module.exports = {
    findOne() {
        return knex('users').where("username", username).first()
    }
}

但是,运行 应用程序在控制台中出现以下错误:

.getOne()

SyntaxError: Unexpected token .

at createScript (vm. js:80:10)

...

似乎由于某种原因它不接受queries.findOne()声明。我在 => {} 中尝试了没有语句的 passport.use,它不会导致应用程序出错。

我应该用不同的方式写 queries.findOne() 吗?我也想过将这个函数包装在 app.use() 中,但我觉得这不合逻辑。

好像我在某处打错了字,但我尝试的一切都进入了死胡同,我似乎无法弄清楚这个简单的问题。

错误可能来自 promise 语法:

queries.findOne().then((user)) => {
   ...
})

必须改写为:

queries.findOne().then((user) => {
   ...
})

下面是完整的块:

passport.use(new LocalStrategy(options, (username, password, done) =>{ 
    queries.findOne().then((user) => {
        console.log(user)
        if (!user) return done(null, false);
        if (!autHelpers.comparePass(password, user.password)) {
            return done(null, false);
        } else {
            return done(null, user);
        }
    }) // There was also a missing end parenthesis here
}));

为防止将来出现此类语法问题,您可以使用 eslint.

等 linter