从node_modules获取变量

时间:2018-02-23 15:51:19

标签: node.js express node-modules keystonejs

我正在尝试从node_modules获取变量到我的应用程序。我已经使用module.exports导出它,但是当我使用require('path/of/required/file/in/node_modules')时,它显示'意外令牌导入'。我试图从node_modules获取用户信息,因为keystone没有正式的策略来获取用户数据。

我的本地文件

var keystone = require('keystone');
Teaching = keystone.list('teaching');
UserInfo = require('../../node_modules/keystone/admin/client/App/components/Footer/index.js').footer;
User = keystone.list(keystone.get('user model'));
console.log(User);
exports = module.exports =function(req,res){
    var view = new keystone.View(req,res);   
    var locals = res.locals;

    locals.section = 'teaching';
    locals.data = {
        teachingData : []
    };

    view.on('init',function(next){
        var teaching = Teaching.model.find();
        teaching.exec(function(err,results){
           locals.data.teachingData = results;
           //console.log(locals.data.teachingData);
           next(err);
        });
    });
    view.render('teaching');     
}

Node_module文件

import React from 'react';
import { css, StyleSheet } from 'aphrodite/no-important';
import { Container } from '../../elemental';
import theme from '../../../theme';

var Footer = React.createClass({
displayName: 'Footer',
propTypes: {
    appversion: React.PropTypes.string,
    backUrl: React.PropTypes.string,
    brand: React.PropTypes.string,
    user: React.PropTypes.object,
    User: React.PropTypes.object, // eslint-disable-line react/sort-prop-types
    version: React.PropTypes.string,
},
// Render the user
renderUser () {
    const { User, user } = this.props;
    if (!user) return null;
    return (
        <span>
            <span> Signed in as </span>
            <a href={`${Keystone.adminPath}/${User.path}/${user.id}`} tabIndex="-1" className={css(classes.link)}>
                {user.name}
            </a>
            <span>.</span>
        </span>
    );
},


render () {
        const { backUrl, brand, appversion, version } = this.props;

        return (
            <footer className={css(classes.footer)} data-keystone-footer>
                <Container>
                    <a
                        href={backUrl}
                        tabIndex="-1"
                        className={css(classes.link)}
                    >
                        {brand + (appversion ? (' ' + appversion) : '')}
                    </a>
                    <span> powered by </span>
                    <a
                        href=""
                        target="_blank"
                        className={css(classes.link)}
                        tabIndex="-1"
                    >
                        VK
                    </a>
                    <span> version {version}.</span>
                    {this.renderUser()}
                </Container>
            </footer>
        );
       },
     });
/* eslint quote-props: ["error", "as-needed"] */
const linkHoverAndFocus = {
    color: theme.color.gray60,
    outline: 'none',
};
const classes = StyleSheet.create({
    footer: {
        boxShadow: '0 -1px 0 rgba(0, 0, 0, 0.1)',
        color: theme.color.gray40,
        fontSize: theme.font.size.small,
        paddingBottom: 30,
        paddingTop: 40,
        textAlign: 'center',
    },
    link: {
        color: theme.color.gray60,

        ':hover': linkHoverAndFocus,
        ':focus': linkHoverAndFocus,
    },
});

exports.footer = Footer.renderUser();

1 个答案:

答案 0 :(得分:1)

1)可能发生“意外的令牌导入”错误,因为当前的JavaScript环境不支持import语句;您正在尝试从Keystone节点模块导入的代码在正常使用之前进行转换。当Keystone使用该组件时,这不是问题。但是,如果您将React组件导入非React文件,那么您肯定会遇到问题。这导致了我的下一个问题:

2)您的代码中根本没有使用UserInfo。您不能只使用Keystone的React组件来显示用户信息,除非您在React环境中工作(它看起来不像您。)。使用此组件的用例是什么?